• ベストアンサー

マクロの部分一致検索で質問です。

マクロの初心者で 先日もお世話になりましたが、 また質問致します。 Loopを使って、A列を上から1つずつ見ていき シートの文字を取得して、取得した文字の中に*があれば 処理1をするようにしたいのですが、 どうもうまくいきません。 下の状態では当然ですが、ダメでした。 わかる方にアドバイスをお願いします。 For LOOP_A = 3 To LASTRow Step 1 T = Sheet1.Cells(LOOP_C1, 1).Value If T Like "*" = True Then 処理1 Else End If  ・  ・

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

ループカウンタLOOP_A は簡単にiなどが良い なぜT = Sheet1.Cells(LOOP_C1, 1).Valueの LOOP_C1とLOOP_A が違うのか。基本的におかしいのでは。 部分一致は P=instr(T,x) xは問題にしている・探している文字列 でPが0かどうか判別すればよい ーー Likeは演算子といわれるもので、使い方が根本的に間違っている。*だけではまず役立たない。 例データ A1:A5 asdf asf abc aabc asdab で Sub test01() For i = 1 To 5 MsgBox Cells(i, "A") Like "*ab*" Next i End Sub を実行して見ること False False True True True が表示される。 これで該当はTrueをIFで聞けばよい。

wise123
質問者

お礼

ありがとうございました。 結果的には下の様なコーディングとなりました。 If Cells(T, "A") Like "*計*" = True Then 出来るだけ自分でと思いますが、 まだまだ初心者ですので、 これからもお世話になると思います。

その他の回答 (2)

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.3

>If T Like "*" = True Then If T Like "*[*]*" = True Then VBAのHELPのLikeに書いてあります

wise123
質問者

お礼

ありがとうございました。 結果的には下の様なコーディングとなりました。 If Cells(T, "A") Like "*計*" = True Then LIKEの使い方が、全くわかっていませんでした。 出来るだけ自分でと思いますが、 まだまだ初心者ですので、 これからもお世話になると思います。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

Like演算子では、ワイルドカードとして*(任意の1文字を意味する)が使用できますので、「*」そのものを検索したい場合は、Likeではうまくいきません。 現在のコードだと、空白セル以外はみな(任意の文字があるとして)該当してしまっていませんか? そのままのコードを利用するなら  If InStr(T, "*") > 0 Then などどすれば良いのでは? Elseの処理がないのであれば、範囲からFindなどで該当するセルを探すという方法もありそうですね。

wise123
質問者

お礼

ありがとうございました。 結果的には下の様なコーディングとなりました。 If Cells(T, "A") Like "*計*" = True Then 「*」だとワイルドカードと見分けがつかない為 他の文字で一致させるようにしました。 出来るだけ自分でと思いますが、 まだまだ初心者ですので、 これからもお世話になると思います。

関連するQ&A