- ベストアンサー
特定の文字を含まないセルの行を削除するには
いつもお世話になっております。 特定の文字列(下記では"0610")を含まないセルの行を削除するプログラムを組むにはどのようにしたどのようにしたらよいのでしょうか。 以下のようなプログラムを組んでみました。 Sub test() Dim i As Long With Range("C1") For i = .CurrentRegion.Rows.Count To 1 Step -1 If .Offset(i, 0) <> "0610*" Then .Offset(i,0).EntireRow.Delete Next i End With End Sub しかしこれでは先頭行を残し全ての行が削除されてしまいます。 IF文の"<>"がうまくないのだと思いますが、Like演算子の反対のようなものはありませんでしょうか。ご教授いただければ幸いです。 *ちなみに上のプログラムは'06年10月以外のデータは削除するために作ったものです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 含む等は、Like演算子が汎用性がありますが、 今回のような場合は、あっさりと頭4桁処理でもOKですよね。 If Left(.Offset(i, 0), 4) <> "0610" Then .Offset(i, 0).EntireRow.Delete それから一言。 提示のコードでは最後のセルの次のセルからチェックしているのはお分かりですよね? それについては今回は問題はないですが、Offsetを使う時は特に気をつけないといけない点のひとつだと思います。
その他の回答 (3)
- gatyan
- ベストアンサー率41% (160/385)
そのまま if NOT A like B then ではダメでしたか?
お礼
gatyanさんありがとうございます。 A=(i,0)、B="0610*"としましたが、コンパイルエラーになってしまいました。代入のさせ方が間違っているのでしょうか。
- papayuka
- ベストアンサー率45% (1388/3066)
> Like演算子の反対のようなものはありませんでしょうか ようは True か False かですから反転させれば良いのでは? If Not .Offset(i, 0) Like "0610*" Then .Offset(i, 0).EntireRow.Delete
お礼
papayukaさんありがとうございます。 If Not文にすれば解決するのでしたね。初心者のつたない質問に答えていただきありがとうございました。
- redfox63
- ベストアンサー率71% (1325/1856)
InStrを使ってみてはいかがでしょう if InStr( .Offset(i,0).Value, "0610") = 1 then .Offset(i,0).EntrireRow.Delete といった具合です 0610などが 行頭では場合は =1を修正してください
お礼
ありがとうございます。If Not文にしたところうまくいきました。 InStrの使い方今後も参考にしたいと思います。
お礼
myCatさんありがとうございます。 最初Left関数を使ってみたのですがうまくいきませんでした。.Offsetを関数の中で使えばよかったのですね。 .Offsetは最近使い始めたばかりなので、使い方を覚えていきたいと思います。