質問

 御力添え、お願いします。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 演算子を使います。

この回答へのお礼

 BLUEPIXY様、並びに imogasi様、
遅くなって、すみません。
御回答、ありがとうございました。m(__)m

 当初からの質問がズレてるとのご指摘、
申し訳ごさいませんでした。m(__)m
 適当に、サイトからのツギハギで作った
モノだったので、そのレベルで答えがあっても
理解できないと思い、歪曲してお聞きしてました。 お手数をお掛けして、すみませんでした。

又、質問させて頂く事になると思いますが、
ひとまずは、解決です。\(^o^)/
ありがとうございました。m(__)m

#3です。お礼の
>RengeやCellを使わないで、するにはどーすればよいでしょうか?
この質問はエクセルに関数ことのようですし、A1とあるからセルの文字列のことのように思いました。そうすると「RengeやCellを使わないで」という意味が良くわかりません。
文字列 Like (パターン)がTRUEかFALSEの値を持ちます。
文字列はセルの値でなくても、シート名でも良いです。
IFではワイルドカードは直接使えないでしょう。
COUNTIFなら使えます。
VBAならWorksheetFunction.COUNTIFなら使えると思います。
質問の意味がところどころ捉えられなくて、回答できない状態です。
ーーー
=IF(COUNTIF(A1,"*B*")>0,"OK","NO")
こういうことをきいているのかな。

質問が出ている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列。
ASDBCVY
FGHDN
BBRTEY
GHSRN
BNDFXY
HJNMBBY
BY
bbN
B BY
XBBY
LIKEは、VB(A)のLIKE演算子といわれるものです。
文字パターンに? * # [文字リスト] [!文字リスト]
などが使えます。
指定した文字列が、文字パターンの条件と一致しているか調べることができる。
Accessの例ですが
http://www.geocities.jp/cbc_vbnet/kisuhen/enzans …
のLIKE演算子を参照。
SQLなどでも同じようなものが使える。

この回答へのお礼

 imogasi様、御回答ありがとうございます。m(__)m

 LIKE演算子とは、まったく知りませんでした。

 ところで、本当に申し訳ないのですが、
先にも補足させて頂いた様に、RengeやCellを
使わないで、するにはどーすればよいでしょうか?
 ○○が◇▲×なら→If~~like "*▲*" Then
で、良いのでしょうか?下記では、シート名に
しておりましたが、これがテキストが起動中ならに
変更した時も、同様の文法構成で良いのでしょうか?

 できれば、=(イコール)"*▲*" Then の
形であれば分りやすくて、嬉しいのですが。(~_~;)

 恐れ入りますが、もう暫く
御教授お願いします。m(__)m

>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

セルでの入力だと
=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

このQ&Aは役に立ちましたか?18 件

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

新しく質問する

注目の記事

フリーアナウンサー長谷川豊氏の新コーナー「このニュースどう思います?」がスタート!

元フジテレビのフリーアナウンサー長谷川豊氏から気になるニュースについておしトピの皆さんに質問します! 皆さんの意見をもとに長谷川豊氏がコラムを執筆します! アプリリリース記念として最大1万分のアマゾンギフト券プレゼントキャンペーンも実施中!


新しく質問する

このカテゴリの人気Q&Aランキング

毎日見よう!教えて!gooトゥディ

べんりQ&A特集