私は3つの列を含むリストを持っています。最初の列には名前があり、他の2つの列には番号があります。マクロは、最初の名前(A1)を取得し、列Aを検索して別のオカレンスを探します。検索とマクロの高速化
それが見つかると、行全体が削除されます。次に、A2に移動して同じことを行います。それは約500のエントリのためのokを働かせるが、3000のエントリを使用することはそれをかなり遅くする。このコードをスピードアップする方法はありますか?
Sub Button1_DeleteRow()
Dim i As Integer
Dim j As Integer
Dim Value As Variant
Dim toCompare As Variant
For i = 1 To 3000
Value = Cells(i, 1)
For j = (i + 1) To 3000
toCompare = Cells(j, 1)
If (StrComp(Value, toCompare, vbTextCompare) = 0) Then
Rows(j).EntireRow.Delete
End If
Next j
Next i
End Sub
+1素晴らしいです! –
ありがとう、素晴らしい答え。マクロがなぜそんなに長い時間を取っているのかをお聞かせください。どうすればスピードアップできますか? – Ali
@Aliあなたの現在のコードを意味しますか?そうであれば3000 =(3000/2)-1500 = 4498500のループを実行しています。範囲ループは本質的に遅いa)速度を上げるには、コード開始時にScreenUpdatingとCalculationをオフにしてください(そしてコード終了時に戻る)b)行を削除する場合は、行をスキップしないように上から下を削除する必要がありますあなたのコードは2つ連続しています)。 – brettdj