• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルマクロの部分比較について)

エクセルマクロの部分比較について

このQ&Aのポイント
  • エクセルマクロのLike演算子を使用した部分比較をしようとしたのですが、一部のマクロが動作しない状況です。理由が分からないため、アドバイスをいただけると助かります。
  • 動作するマクロ(tes1)では、Forループを使用してセルの値を取得し、Like演算子を使用して部分比較を行っています。一方、動作しないマクロ(tes2)では、一時変数にセルの値を代入してから部分比較を行っています。
  • 動作しないマクロ(tes2)の場合、一時変数に正しくセルの値が代入されているか確認する必要があります。また、Like演算子を使用する際に、正しいパターンを指定しているかも確認してください。

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

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

どういうつもりで(文章に書くとどういうことで)やりたいのか。 tes2の If name Like "*" & Cells(i, 1) & "*" Then を使っているのか? 普通は、「含まれるか?}だから、セルA5,A6,・・・の値が(例えば「東京の人」とか、「東京の電車は混雑している」など)長く、B1セルの値が単語(例えば 東京)で短いのはないか? 設定が、普通はB1セルが短く、A5,A6,・・・の値が長く、長いほうに短いほうに含まれて居るか聞くのではないか。 質問者のB1とA列のデータは? >動かない理由が分からないですが 動かないと言うより思った結果が出ないというのでではないのか。 両者は違うよ。 ーー もう少しVBAを色々勉強してから質問のこと。でないと、なんでも質問になる状態ではないか。 Sub test3() ーー Dim name As String name = Range("b1") For i = 2 To 5 MsgBox Cells(i, 1) r = Cells(i, 1) Like "*" & name & "*" If r Then Cells(i, 3) = 1 End If Next i End Sub 例データ ーー 千葉  <-B1 千葉は広い 1 東京は遠い 滋賀の琵琶湖 房総半島の千葉は広いですか 1

osarusan0214
質問者

お礼

なるほどというか、軽いうっかりミスみたいな感じでした^^; でも、とても勉強になりました!! ありがとうございました!!

その他の回答 (2)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

"abcde" like "*cd*" なら,前の*が"ab"の代わりをして,後ろの*が"e"の代わりをしてくれるので「abcde=abcde」を作れて成立します。 ワイルドカードは「文字を削る」ようなマネはできません。 "cd" like "*abcde*" としてたのでは,どんなにひっくり返してもabやeの部分が邪魔をするので「cd<>abcd」にしかならず,成立しません。 もちろん "*cd*" like "abcde" なら成立です。 #実際のところ。  A列やB1に具体的にどんなデータを入れてるのかナイショなので,あなたの失敗を的確に指摘することは誰にも出来ませんよ?  test2だって,A列やB1に「適切なデータ」が入っていれば,別に問題なく実行できます。  結果が出なかったこと自体,それらのデータなら「適切な結果」だったと言い換えても間違いありません。

osarusan0214
質問者

お礼

なるほどというか、軽いうっかりミスみたいな感じでした^^; でも、とても勉強になりました!! ありがとうございました!!

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

ワイルドカードが付いたLike "*"&Range&"b1"&"*" の意味はB1セルのを含む文字を意味しています。 B1セルの文字をA5セルからA20セルの範囲で検索の操作をしているわけですから最初のマクロが正しいことになりますね。 例えば東京とB1セルにあった時にA5セルが東京都千代田区となっている場合には最初のマクロではC5セルに1が表示されますが、二番目のマクロではB1セルの値が東京都千代田区を含むとなりますと、そうではありませんのでC5セルには1が表示されませんね。

osarusan0214
質問者

お礼

なるほどというか、軽いうっかりミスみたいな感じでした^^; でも、とても勉強になりました!! ありがとうございました!!

関連するQ&A