VBA記事10. 列の削除 と ワイルドカードの使用




まず、上記のファイルを用意します。




**************************************

Sun sample11()

Dim i As Long

For i = 10 To 2 Step -1

‘流動的に対応するならCells(Rows.Count ,1).End(xlUp).Row To 2 Step -1 と書く

If Cells(I,2) Like “削除*” Then

Rows(i).Delete

End if

Next

End Sub

**************************************

そして上記のコードを書いて実行すると図の左のようになります。

注意点としてはFor がいつもの処理と違って逆流していることです。



逆流させずに処理すると5と6のように連続していた場合、うまく消えません。


これはステップインで処理を見てもわかるのですが、

逆流しない処理だと、iが5で5行目が消された瞬間に、6が5行目に来ます。

そして次にiが6になったときに6行目には7が来ているので、6行目が処理されなくなるという事が起こるのです(処理ターゲットの列がズレてしまう)

文章だとわかりづらい可能性もあるので、是非シートを複数コピーして、ステップインで動きを1コマずつ見れば何が起こっているか直感的に理解できます。


この列がズレるのを防ぐためにForを逆流させて下の行から削除していく事で、処理漏れを防いでいます。


メカニズムはよくわからかった人でも行や列の削除には逆流処理を行うと覚えておけばOKです。


またワイルドカードのアスタリスク(*)を使用するためにLikeを使用しています。


このとき=は不必要になり、削除の文字がセルの頭についていれば拾えるようになります。


 *削除*にすれば削除を含んだ文字を拾えるようになります。


コメント