PU-METALのブログ

日銀にはウンザリなので外貨専になりました

マクロの実行を途中で止める

無限ループじゃCtrl+Breakですが

処理量が膨大でいつまでも終わらず帰られへんやんけな時、それじゃまたいつになったら止まるか判らないのね。そんな時用

 

先ずタスクマネージャーからエディターを再起動して保存ボタンを

これで実行途中の状態が保存されます

エクセル本体はまだ固まったままなのでタスクマネージャーから終了

これで帰れます

 

昨夕やっちまった例

こんな表

f:id:kohnodechu:20170908132950p:plain

この水色の20万行*4列に有る価格で1行下の価格が同じならそれを消すマクロ

 

Sub 下が同じなら消す()

Dim Rp As Range 'rpはk-n全部
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For Each Rp In Selection
With Rp
 If .Value = .Offset(1).Value Then
  .Offset(1).ClearContents
 End If
End With
Next
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub

こんな簡単なやつですぐ終わるだろうと思ってたらところがどっこい

1時間20分で9万行しか処理出来てませんでした

 

それでプロシージャに少し手を加えてみました

If .Value = .Offset(1).Value Then

 .Offset(1).ClearContents
End If

この部分を

If Rp <> "" Then
 If .Value = .Offset(1).Value Then
  .Offset(1).ClearContents
 End If
End If

とそのレンジにデータが有れば処理するというのを追加

 

すると何と5分30秒で終了

 

早く処理させるプロシージャ書くよう心がけましょうね