• ベストアンサー

特定の文字を含まないセルの行を削除するには

いつもお世話になっております。 特定の文字列(下記では"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月以外のデータは削除するために作ったものです。

質問者が選んだベストアンサー

  • ベストアンサー
  • myCat
  • ベストアンサー率60% (9/15)
回答No.4

こんばんは。 含む等は、Like演算子が汎用性がありますが、 今回のような場合は、あっさりと頭4桁処理でもOKですよね。 If Left(.Offset(i, 0), 4) <> "0610" Then .Offset(i, 0).EntireRow.Delete それから一言。 提示のコードでは最後のセルの次のセルからチェックしているのはお分かりですよね? それについては今回は問題はないですが、Offsetを使う時は特に気をつけないといけない点のひとつだと思います。  

yuichi8
質問者

お礼

myCatさんありがとうございます。 最初Left関数を使ってみたのですがうまくいきませんでした。.Offsetを関数の中で使えばよかったのですね。 .Offsetは最近使い始めたばかりなので、使い方を覚えていきたいと思います。

その他の回答 (3)

  • gatyan
  • ベストアンサー率41% (160/385)
回答No.3

そのまま if NOT A like B then ではダメでしたか?

yuichi8
質問者

お礼

gatyanさんありがとうございます。 A=(i,0)、B="0610*"としましたが、コンパイルエラーになってしまいました。代入のさせ方が間違っているのでしょうか。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

> Like演算子の反対のようなものはありませんでしょうか ようは True か False かですから反転させれば良いのでは? If Not .Offset(i, 0) Like "0610*" Then .Offset(i, 0).EntireRow.Delete

yuichi8
質問者

お礼

papayukaさんありがとうございます。 If Not文にすれば解決するのでしたね。初心者のつたない質問に答えていただきありがとうございました。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

InStrを使ってみてはいかがでしょう if InStr( .Offset(i,0).Value, "0610") = 1 then .Offset(i,0).EntrireRow.Delete といった具合です 0610などが 行頭では場合は =1を修正してください

yuichi8
質問者

お礼

ありがとうございます。If Not文にしたところうまくいきました。 InStrの使い方今後も参考にしたいと思います。

関連するQ&A

専門家に質問してみよう