プログラムがフリーズする原因となっている Excel VBA サブルーチンを作成しました。問題をサブ内の Do-Until ループに切り分けました。
最初に少し背景情報を示します。
マージする必要がある 2 つのシートがあります。マージ後、一部の行には重複データが含まれます。重複する行は、列 D に同じ値を持ちます。
Do-Until ループは、各行の列 D の値を下の行の値と比較します。値が同じ場合、その行は削除されます。また、列 A で特別な行番号式を使用しているため、削除があるたびに、削除によって式内の参照が台無しになるため、サブは現在の行から下の行に式をコピーします。ループは、空の行に到達するまで続きます。
現在、シートには 500 行近くあるので、大量のデータですが、それほど多くはありませんよね? サブは Office 2003 で作成され、xls ファイルにあります。現在 Office 2010 を実行しており、互換モードでファイルを操作しています。
とにかく、以下のループのコードをコピーしました。ループが原因でプログラムがフリーズする理由を知っている人はいますか? 前もって感謝します。
Do Until IsEmpty(ActiveCell)
' Define rows and cells
Row1 = ActiveCell.row()
RowPlus1 = ActiveCell.row() + 1
RowMinus1 = ActiveCell.row() - 1
Row1Student = "D" & Row1
RowPlus1Student = "D" & RowPlus1
Row1Number = "A" & Row1
RowMinus1Number = "A" & RowMinus1
If Val(Range(Row1Student)) = Val(Range(RowPlus1Student)) Then
ActiveCell.EntireRow.Select
Selection.Delete Shift:=xlUp
Range(RowMinus1Number).Select
Selection.Copy
Range(Row1Number).Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveCell.Offset(-1, 0).Select
End If
ActiveCell.Offset(1, 0).Select
Loop
PS: 私は決してプロのプログラマーではありません。私は独学で VBA を学んだので、自分のコードがきれいではない可能性があることは十分承知しています。そのため、実際に VBA のトレーニングを受けた人からのフィードバックを期待しています。
編集して追加: わかりました、ループのコピー アンド ペースト部分を削除したところ、かなりスピードアップしたようです。それで、サブの特定の部分が問題を引き起こしている理由を誰か知っていますか?