ネット上で、「vba 行の削除」で検索すると
Excel(エクセル) VBA入門:条件を満たす行を削除するの様に
Sub test01()
Dim lRow As Long
Dim i As Long
lRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = lRow To 2 Step -1
If Cells(i, 2).Value = 0 Then
Range(i & ":" & i).Delete
End If
Next i
End Sub
と一番下の行から上まで、条件を確認しながら一行づつ削除するコードが一般的です。
※このサイトで説明されているように、必ず、下から上へ移動します(上から下はダメ)。
VBAだけで、行の削除(目的)を実行するには、上記の方法になります。
エクセルの関数の機能を使った場合
C2セルに Match関数で、該当するセルの最初の行番号
D2セルに Countif関数で、該当するセルの個数 を表示しておけば
Sub ボタン1_Click()
Do While Range("D2").Value > 0
GYOU = Range("C2").Value
Rows(GYOU).Delete
Loop
End Sub
もう少しまとめると
Do While Range("D2").Value > 0
Rows(Range("C2").Value).Delete
Loop
なんと3行で可能です(関数を入れておくセルは必要です)
削除する条件などは、関数に入れる事ができますので
後々、VBAを編集する必要なく、修正が出来てます。
せっかくエクセルを使用していますので
エクセルのVBAの力だけでなく、エクセルの持つ機能や関数もフル活用しましょう。
まだまだ、新しいアルゴリズム(目的を達成するための手順)の発見はありそうです。
たぶん、こちらの方が、条件を満たす行を全て検証する事がないので
PCの負担も軽い(?速い)のではないでしょうか。
総当たりで、条件を確認する場合
・データ件数が増えると当然、処理時間が長くなります。
・繰返しの処理と条件を確認する処理(IF文)が毎回実行されます。
関数を使って、該当する行を探して削除する場合
・削除するデータの行数分の繰り返し処理ですみます。
・VBAで条件を確認する必要がありません。(関数で行っています)
にまとめてあります。