指定された値を含む行を削除しようとしています。以下のコードは〜200k行のシートで動作しましたが、350k行のシートで実行しようとするとクラッシュします。それをより効率的にする方法はありますか?どうもありがとう!彼らは、アレイ内の項目と一致した場合、時間の選択とフィルタリング350K行1を参照してください:あなたの現在のコードはかなり可能な限り最も非効率的なことをやっている次のVBAコードをより効率的に作成する
Sub MultiDelete()
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With
Range("A1").Activate 'change to suit the column containing the names
Dim MultiDelete
MultiDelete = Array("Name1", "Name2", "Name3") 'put as many names as you like in the array
Dim G As Variant
While ActiveCell.Value <> ""
G = Filter(MultiDelete, ActiveCell.Value)
If UBound(G) <> -1 Then
Selection.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).Activate
End If
Wend
With Application
.ScreenUpdating = True
.DisplayAlerts = True
End With
End Sub
これで問題が完全に解決されるかどうかはわかりませんが、VBAの組み込み関数を使用することは、通常は自分で処理するよりも大幅に低くなります。たとえば、ActiveCell.Offsetを使用すると、forループを使用してセルを反復処理するよりもスループットが低下する可能性があります。同じことが、細胞の活性化にも当てはまります。このコマンドを使用することなく、値を取得して変更することができます。 – KM529