御力添え、お願いします。m(__)m

質問はエクセルにて、特定の文字が同じで、
含まれていれば"OK"としたいのですが、
自分なりに調べて、*(アスタリスク)が、
ワイルドカードで、使ってみたのですが↓
=IF(A1="*"&"B"&"*","OK","NO")
と書いても結果が、"NO"になるのです。

 A1には、「ABC」や「CCB」「BAKA」が入り、
全て"OK"としたいのです。

 ?マークも対象文字位置が同じならOKと思い、
試しましたが、これもダメでした。

 IF文に限定したわけでは、ないです。
他の方法でも、特定文字の有無から次を実行できる、
方法を御教授して頂きたいのです。
 本当は、マクロ(VBA)の中で、使って行きたいので、
セルの直接入力とVBE入力とで、違いが有るのなら、
両方教えて貰えれば、幸いです。

 文法などでは無く、単にexcelの設定ミスなのかも
知れませんが、自分なりに調べた結果
わかりませんでした。(ToT)

 答えの説明は、私がバカなのでお手数になると、
思いますので文法(方法)だけでも構いません。
出来れば、わかり易く解説して貰えると、嬉しいです。

よろしく、お願いします。m(__)m

このQ&Aに関連する最新のQ&A

A 回答 (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 演算子を使います。
    • good
    • 0
この回答へのお礼

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

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

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

お礼日時:2006/04/13 21:30

#3です。

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

質問が出ている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などでも同じようなものが使える。
    • good
    • 0
この回答へのお礼

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

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

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

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

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

お礼日時:2006/04/12 22:06

>VBA版がresult=…と有るのですが、私には理解不能です。


結果を何かに代入するのだと思って、そのように書きました。
別にサンプル以上の意味は無いです。
特に"OK","NO" の値が必要ないなら普通にif で
If Range("A1").value like "*B*" Then
'B が含まれていた時の処理
Else
'B が含まれていない時の処理
End If
とすればいいと思います。
    • good
    • 0
この回答へのお礼

 再び早々と、ありがとうございます。m(__)m

 そーですね、"代入"ですね。
数式で、考えてました。(~_~;)オハズカシイ。

 ところで、申し訳ないのですが、
Range("A1")を使わずに、IF~~Thenの形で、
sheetの名前が「*重要*」なら…、
If Active.Sheet.name.value like "*重要*" Then
なのでしょうか?←やってみたがダメでした。(;o;)

すみません、どーすれば良いでしょうか…(ToT)

以前は、IF~ = "絶対重要"で、動いていました。
=(イコール)を用いたのが私には分り易いのですが、
ダメなのでしょうか? 

 度々で、本当に申し訳がないです。

 宜しくお願いいたします。m(__)m

お礼日時:2006/04/12 21:23

セルでの入力だと


=IF(COUNTIF(A1, "*B*"),"OK","NO")
でいいと思います
VBAだと
result=IIF(Range("A1").value like "*B*","OK","NO")
でいいと思います。
    • good
    • 0
この回答へのお礼

 BLUEPIXY様、早々の返信、
ありがとうございました。m(__)m
 
 1週間悩んで、ここでも質問が低レベル過ぎて、
なかなか返信が無いものと思っていたので、
本当に、”感謝”です。m(__)m

 あつかましいのですが、VBA版がresult=…と
有るのですが、私には理解不能です。すみません。

 できれば、IF~~として貰えないでしょうか?
 とある工程を実行後の動作で、実際にはセルは
使わないのです。(~_~;)(変更が僕には…、)

 御時間が有る時で結構です。
 宜しくお願い致します。m(__)m

お礼日時:2006/04/12 19:45

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q4桁の数字を A*1000+B*100+C*10+D 以外で表現したい。

A=1
B=2
C=3
D=4

のとき 
1234をA*1000+B*100+C*10+D以外で表現したいのですが
何かいい方法がないでしょうか?
4桁ならいいんですが
15、6桁を10行ぐらいコーディングしないといけないのでなえてます↓助けてください。

Aベストアンサー

No.4です。

VB2005でも問題なくできますよ。実際に確認済みです。

Dim A As Integer = 1
Dim B As Integer = 2
Dim C As Integer = 3
Dim D As Integer = 4
Dim E As integer

E = (A & B & C & D) * 1
MsgBox(E)

これで試してください。

QExcel VBE

Excel VBEでこの問題を解きたいのですが、どうすればいいのか全くわからなくて困ってます… どなたか、わかる方いらっしゃいませんか?教えてください…

1. 1900年から2008年までのうるう年を見つけて、一個のメッセージボックスにすべてのうるう年を表示するようにプログラムを作成する。 2. 下記の数値の和を繰り返し文を使用して算出しなさい。 1+2+3+4+……+100 1の二乗+2の二乗+3の二乗+……+20の二乗 1の三乗+2の三乗+3の三乗+....+ です。

どうしてもわかりません…
わかる方教えて下さい。
お願いします。

Aベストアンサー

'1900年から2008年までのうるう年
Sub test01()
For i = 1900 To 2008
If Day(DateSerial(i, 3, 0)) = 29 Then x = x & i & vbCrLf
Next
MsgBox x
End Sub
'(3月0日が2月末日となることを利用しています)

'1+2+3+4+……+100
Sub test02()
For i = 1 To 100
x = x + i
Next
MsgBox x
End Sub

'1の二乗+2の二乗+3の二乗+……+20の二乗
Sub test03()
For i = 1 To 20
x = x + i ^ 2
Next
MsgBox x
End Sub

これで1の三乗+2の三乗+3の三乗+....+ はもうわかりますね。

QエクセルのVBE

エクセルのVBEで四則計算のプログラムを作りたいんですが、プログラムが設定できずにいます。
教えてください!!

Aベストアンサー

#5のご回答で良いのですが、下記の方法もあります。
表示-ツールバー-コントロールツールボックスをクリックし、出てきたツールボックスのコマンドボタンを、直接ワークシート上に貼りつけ、編集モードのうちに、ボタン内部でダブルクリックするとVBE画面になると同時に
Private Sub CommandButton1_Click()

End Sub
が出ますから、この間の行にプログラムを記述します。
四則演算は
x=Range("A1")
y=Range("B1")
z=x+y
z=x-y
z=x*y
z=x/y
z=x Mod y
などと記述し、Range("C1")=z
で良いでしょう。

Q*二つのマクロを両方実行させたいです*(初心者)

*二つのマクロを両方実行させたいです*(初心者)
VLOOKUPのように、二つのSHEETで、それぞれ値が一致するものがあればもうひとつのSHEETのほうに値を自動的に表示させる、という仕組みをマクロで作ってみました。
(尚、今回はその中身の質問ではありません)
下記の二つの式は、それぞれは機能する、ということは確認済みなので、中身には問題ないはずなのですが、
これら二つを同じエクセルファイルに、Macro1,Macro2と設定して、実行しても、Macro2のほうしか実行されません。
1のほうは、実行を押しても作動しません。

尚、Macro2を消去すると、1のほうは正常に実行されます。

このMacro1と2は、一つにまとめても問題ありません。
(何にせよどちらも実行されればどんな形でも構いません)
初心者のため、説明が下手ですが、どなたか教えていただけないでしょうか。
どうすれば、下記の1と2を両方実行することができるのでしょうか。

下記が、私の作った式(Macro1と2です)

Sub Macro1()
For s = 2 To 70 '処理するSheet1の行数範囲
b = Sheets("Sheet1").Cells(s, 2) 'bにB列の値を代入
For u = 2 To 70 '検索する元データの行数範囲
If Sheets("MASTER").Cells(u, 1) = b Then 'MASTERのA列の値とSheet1のB列が一致した場合
w = Sheets("MASTER").Cells(u, 2) 'wにB列の値を代入

Sheets("Sheet1").Cells(s, 3).Value = w 'Sheet1のC列に値を入力

Exit For '値が見つかったのでForを終了
End If
Next
Next
End Sub


Sub Macro2()
For s = 2 To 70 '処理するSheet1の行数範囲
b = Sheets("Sheet1").Cells(s, 2) 'bにB列の値を代入
For u = 2 To 70 '検索する元データの行数範囲
If Sheets("MASTER").Cells(u, 1) = b Then 'MASTERのA列の値とSheet1のB列が一致した場合
w = Sheets("MASTER").Cells(u, 2) 'wにB列の値を代入

Sheets("Sheet1").Cells(s, 3).Value = w 'Sheet1のC列に値を入力

Exit For '値が見つかったのでForを終了
End If
Next
Next
End Sub

*二つのマクロを両方実行させたいです*(初心者)
VLOOKUPのように、二つのSHEETで、それぞれ値が一致するものがあればもうひとつのSHEETのほうに値を自動的に表示させる、という仕組みをマクロで作ってみました。
(尚、今回はその中身の質問ではありません)
下記の二つの式は、それぞれは機能する、ということは確認済みなので、中身には問題ないはずなのですが、
これら二つを同じエクセルファイルに、Macro1,Macro2と設定して、実行しても、Macro2のほうしか実行されません。
1のほうは、実行を押しても作...続きを読む

Aベストアンサー

Sub Macro1()
Msgbox "これはMacro1です。"
End Sub

Sub Macro2()
Msgbox "これはMacro2です。"
End Sub

Sub Macro3()
Call Macro1
Call Macro2
End Sub


上記の3つのマクロを1つのモジュールに書いて、Macro3を実行するとどうなりますか?


VBEでは、[F8]キーを押すことで、1行ずつステップ実行させることができます。
ステップ実行で、実際のマクロの流れを確認することができます。

上記のMacro3にカーソルを合わせて、[F8]キーを押してみてください。
そして、上記の3つのマクロがどのように流れになるのか確認してみてください。

それができたら、ご自分で作ったマクロでも[F8]でステップ実行して流れを確認してみてください。


あと、私も#6さんと同様の疑問を持っていますので、回答よろしくお願いします。

Q例外ってIf文の中に入れますか?If文の外でTry...Catchしますか??

例外ってIf文の中に入れますか?If文の外でTry...Catchしますか??

Sub Cal(By Val Data As String)

 If ( Flag = "hoge") Then
 Total = js.Eval(Work)
 End If
End Sub

それと、”エラーコードをテキストの説明に変換する”FormatMessage関数を使おうと思っています。

「例外処理 = FormatMessage関数」という図式は古いですか?いまはもっと違う方法ですか?

Aベストアンサー

FormatMessage関数を初めて聞いたので突っ込まなかったのですが、ちょっと調べてしました。
http://msdn.microsoft.com/ja-jp/library/cc428939.aspx
Win32APIを利用した関数なんですね。

戻り値が存在していろいろできるみたいですね。
・関数が成功すると、バッファに格納されたバイト数(Unicode 版の場合は文字数)が返ります(終端のNULLを文字除く)。
・関数が失敗すると 0 が返ります。拡張エラー情報を取得するには、 GetLastError 関数を使います。

調べた結果ですが、これを必要とするのであれば使ってもいいと思います。

但し、例外処理でメッセージを出したいだけであれば MessageBox.Show を使ってしまうと思います。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報