- ベストアンサー
エクセル(Excel) ワイルドカード *(アスタリスク) 使用方法について。
御力添え、お願いします。m(__)m 質問はエクセルにて、特定の文字が同じで、 含まれていれば"OK"としたいのですが、 自分なりに調べて、*(アスタリスク)が、 ワイルドカードで、使ってみたのですが↓ =IF(A1="*"&"B"&"*","OK","NO") と書いても結果が、"NO"になるのです。 A1には、「ABC」や「CCB」「BAKA」が入り、 全て"OK"としたいのです。 ?マークも対象文字位置が同じならOKと思い、 試しましたが、これもダメでした。 IF文に限定したわけでは、ないです。 他の方法でも、特定文字の有無から次を実行できる、 方法を御教授して頂きたいのです。 本当は、マクロ(VBA)の中で、使って行きたいので、 セルの直接入力とVBE入力とで、違いが有るのなら、 両方教えて貰えれば、幸いです。 文法などでは無く、単にexcelの設定ミスなのかも 知れませんが、自分なりに調べた結果 わかりませんでした。(ToT) 答えの説明は、私がバカなのでお手数になると、 思いますので文法(方法)だけでも構いません。 出来れば、わかり易く解説して貰えると、嬉しいです。 よろしく、お願いします。m(__)m
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>sheetの名前が「*重要*」なら…、 >If Active.Sheet.name.value like "*重要*" Then (私も元の質問と違ってきているような気がしますが・) アクティブシートの名前は、 ActiveSheet.name で得られるので アクティブシートの名前に重要が含まれるかどうかは If ActiveSheet.name like "*重要*" Then と書けます。 また別の方法で If instr(ActiveSheet.name,"重要") Then とか If instr(ActiveSheet.name,"重要")<>0 Then でも良いです。 >以前は、IF~ = "絶対重要"で、動いていました。 シート名が、"絶対重要" で一致するかどうか調べる場合には、 IF~ = "絶対重要" として一致しているかどうかを調べることができますが、 この時に'*' のようなワイルドカードを用いることはできません。 そのような場合に'='の代わりに Like 演算子を使います。
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17070)
#3です。お礼の >RengeやCellを使わないで、するにはどーすればよいでしょうか? この質問はエクセルに関数ことのようですし、A1とあるからセルの文字列のことのように思いました。そうすると「RengeやCellを使わないで」という意味が良くわかりません。 文字列 Like (パターン)がTRUEかFALSEの値を持ちます。 文字列はセルの値でなくても、シート名でも良いです。 IFではワイルドカードは直接使えないでしょう。 COUNTIFなら使えます。 VBAならWorksheetFunction.COUNTIFなら使えると思います。 質問の意味がところどころ捉えられなくて、回答できない状態です。 ーーー =IF(COUNTIF(A1,"*B*")>0,"OK","NO") こういうことをきいているのかな。
- imogasi
- ベストアンサー率27% (4737/17070)
質問が出ているVBAについて Sub test01() For i = 1 To 10 x = Cells(i, "A").Value Like "*B*" If x = True Then Cells(i, "B") = "Y" Else Cells(i, "B") = "N" End If Next i End Sub A1:A10に下記文字列があるとする。 実行後は下記B列。 ASDBCV Y FGHD N BBRTE Y GHSR N BNDFX Y HJNMBB Y B Y bb N B B Y XBB Y LIKEは、VB(A)のLIKE演算子といわれるものです。 文字パターンに? * # [文字リスト] [!文字リスト] などが使えます。 指定した文字列が、文字パターンの条件と一致しているか調べることができる。 Accessの例ですが http://www.geocities.jp/cbc_vbnet/kisuhen/enzanshi.html のLIKE演算子を参照。 SQLなどでも同じようなものが使える。
お礼
imogasi様、御回答ありがとうございます。m(__)m LIKE演算子とは、まったく知りませんでした。 ところで、本当に申し訳ないのですが、 先にも補足させて頂いた様に、RengeやCellを 使わないで、するにはどーすればよいでしょうか? ○○が◇▲×なら→If~~like "*▲*" Then で、良いのでしょうか?下記では、シート名に しておりましたが、これがテキストが起動中ならに 変更した時も、同様の文法構成で良いのでしょうか? できれば、=(イコール)"*▲*" Then の 形であれば分りやすくて、嬉しいのですが。(~_~;) 恐れ入りますが、もう暫く 御教授お願いします。m(__)m
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>VBA版がresult=…と有るのですが、私には理解不能です。 結果を何かに代入するのだと思って、そのように書きました。 別にサンプル以上の意味は無いです。 特に"OK","NO" の値が必要ないなら普通にif で If Range("A1").value like "*B*" Then 'B が含まれていた時の処理 Else 'B が含まれていない時の処理 End If とすればいいと思います。
お礼
再び早々と、ありがとうございます。m(__)m そーですね、"代入"ですね。 数式で、考えてました。(~_~;)オハズカシイ。 ところで、申し訳ないのですが、 Range("A1")を使わずに、IF~~Thenの形で、 sheetの名前が「*重要*」なら…、 If Active.Sheet.name.value like "*重要*" Then なのでしょうか?←やってみたがダメでした。(;o;) すみません、どーすれば良いでしょうか…(ToT) 以前は、IF~ = "絶対重要"で、動いていました。 =(イコール)を用いたのが私には分り易いのですが、 ダメなのでしょうか? 度々で、本当に申し訳がないです。 宜しくお願いいたします。m(__)m
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
セルでの入力だと =IF(COUNTIF(A1, "*B*"),"OK","NO") でいいと思います VBAだと result=IIF(Range("A1").value like "*B*","OK","NO") でいいと思います。
お礼
BLUEPIXY様、早々の返信、 ありがとうございました。m(__)m 1週間悩んで、ここでも質問が低レベル過ぎて、 なかなか返信が無いものと思っていたので、 本当に、”感謝”です。m(__)m あつかましいのですが、VBA版がresult=…と 有るのですが、私には理解不能です。すみません。 できれば、IF~~として貰えないでしょうか? とある工程を実行後の動作で、実際にはセルは 使わないのです。(~_~;)(変更が僕には…、) 御時間が有る時で結構です。 宜しくお願い致します。m(__)m
お礼
BLUEPIXY様、並びに imogasi様、 遅くなって、すみません。 御回答、ありがとうございました。m(__)m 当初からの質問がズレてるとのご指摘、 申し訳ごさいませんでした。m(__)m 適当に、サイトからのツギハギで作った モノだったので、そのレベルで答えがあっても 理解できないと思い、歪曲してお聞きしてました。 お手数をお掛けして、すみませんでした。 又、質問させて頂く事になると思いますが、 ひとまずは、解決です。\(^o^)/ ありがとうございました。m(__)m