御力添え、お願いします。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と関連する良く見られている質問

Qセルにワイルドカード*を含む式を書き込むには?

下記コードはアクティブセルの右にアクティブセルと同じ値を書き込みますが、
ワイルドカード付きの値を書き込むにはどうすれば良いのでしょうか?

n列  (n+1)列

あ     あ*
い     い*
う     え*


______________________________

Sub test1()
Dim R As Range, R1 As Range

Set R = ActiveCell
Set R1 = Range(R, Cells(Rows.Count, R.Column).End(xlUp))

With R1.Offset(, 1)
.Formula = "=" & R.Address(0, 0)
End With
Set R1 = Nothing: Set R = Nothing
End Sub

Aベストアンサー

最後から4行目の
.Formula = "=" & R.Address(0, 0)

.Formula = "=" & R.Address(0, 0) & "&""*"""
にしてください。

Qテキストボックスの中に小文字のアスタリスクがあるのを判別する方法

入力したテキストボックスの中に
小文字のアスタリスク(数は不定)が
あるかどうかを判定するには、
どのようにすれば良いでしょうか?

Aベストアンサー

FormにTextboxを2つ貼り付け、
Private Sub Text1_LostFocus()
MsgBox Text1.Text
p = InStr(Text1.Text, "*")
If p = o Then
MsgBox "アステリスクがありません"
Else
MsgBox "アステリスクがあります"
End If
End Sub
Text1に文字を入れ、Text2にFocusを移すと
*があれば「アステリスクがあります」とメッセージを出します。
VBAならTextBox1がText1になります。

Qエクセル(Excel) ワイルドカード *(アスタリスク) 使用方法について。

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

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

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

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

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

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

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

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

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

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

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

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

 IF文に限定したわけでは、ないです。
他の方法でも、特定文...続きを読む

Aベストアンサー

>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 演算子を使います。

Qワイルドカードは使用可能?

別途、「Matchの処理について」というご質問を
させていただいて一旦は問題が解決したのですが、
新たにまたわからない点が発生しまして、困ってます。

何度も申し訳ありませんが、皆様のお知恵を拝借できれば助かります。

状況としては下記のコード抜粋のように、コードを
記述していますが、"検索値A"の一部に対応するデータ
についてはSheet2の特定の行にセットしたいのです。
つまり特定の検索値Aについては変数"j"を
固定したいと思っています。

その一部の"検索値A"というのは例えば"aaa300"、"bbb300"等、"300"で
終わるもので、これらは特定行に固定したいという
感じです。ワイルカードを使えないものかといろいろ
調べておりますが、よくわかりません。。
もし可能なら、行番号をあらわす変数"j"のデータを
セットする際に"if"を使って、条件分岐したいと思っています。

以上、よろしくお願い致します~。


検索値A = Sheets("sheet1").Cells(i, 1).Value

j = Application.Match(検索値A, Sheets("sheet2").Range("範囲A"), 0)

Sheets("Sheet2").Cells(j, 5).Value = Sheets("SHEET1").Cells(i, 2)

別途、「Matchの処理について」というご質問を
させていただいて一旦は問題が解決したのですが、
新たにまたわからない点が発生しまして、困ってます。

何度も申し訳ありませんが、皆様のお知恵を拝借できれば助かります。

状況としては下記のコード抜粋のように、コードを
記述していますが、"検索値A"の一部に対応するデータ
についてはSheet2の特定の行にセットしたいのです。
つまり特定の検索値Aについては変数"j"を
固定したいと思っています。

その一部の"検索値A"というのは例えば"aaa300"...続きを読む

Aベストアンサー

#2です。
>。こういう使い方はできないのでしょうか。
If hensu = "*300" Then
これは、ワイルドカードのように機能するのを期待しては、使えないでしょう。たとえ他の言語でも。
文字列*300と等しいか、になってしまう。
私もこの表現にワイルドカード的機能をもったらいいなと思ったこともない。
この意味は文章で表すと
(1)文字列の末尾が「300」を含む
(2)先頭以外で「300」を含む
(3)途中を含めて「300」を含む
のどれかのように解されるが、多分(1)だとすると
Sub test01()
i = 2
s = Cells(i, 1)
If Right(s, 3) = "300" Then
MsgBox "語尾が300です"
Else
MsgBox "語尾が300でありません"
End If
End
End Sub
で簡単です。
(2)などでは
Sub test02()
i = 2
s = Cells(i, 1)
p = InStr(s, "300")
If p <> 0 Then
MsgBox "語句に300を含んでいます"
Else
MsgBox "語句に300を含んでいません"
End If
End
End Sub
先頭以外という条件ならp>1を聞けばよい。
末尾なら、P=Len(s)-3が聞いてもよい。
-----
別にLIKE演算子というのがある。
Sub teat03()
Dim s As String
i = 2
s = Cells(i, 2)
s = "aas300"
s = "aad300sss"
If s Like "*300*" Then
MsgBox "300を含みます"
Else
MsgBox "300を含みません"
End If
End Sub
sをいろいろ変えてやってみてください、
http://www31.ocn.ne.jp/~heropa/vb122.htm
http://littlegray.minidns.net/vbtomo/log/vbqanda/lg-bbs_vbqanda_log_35556-35611.html

#2です。
>。こういう使い方はできないのでしょうか。
If hensu = "*300" Then
これは、ワイルドカードのように機能するのを期待しては、使えないでしょう。たとえ他の言語でも。
文字列*300と等しいか、になってしまう。
私もこの表現にワイルドカード的機能をもったらいいなと思ったこともない。
この意味は文章で表すと
(1)文字列の末尾が「300」を含む
(2)先頭以外で「300」を含む
(3)途中を含めて「300」を含む
のどれかのように解されるが、多分(1)だとすると
Sub test01...続きを読む

Qワイルドカードの*で掛け算する。

コマンドライン引数で計算するプログラムを
作成しています。アフタリスク*で掛け算を
したいのです。"*"を代入して計算するのではなく
""を入力しないで計算したいです。つまりこんな感じです。アドバイスまたは良い文献を教えて下さい。

keisan>java Main 2 3 *
6

Aベストアンサー

残念ながらそういうことはできません。
UNIX/LINUX系のシェルは、javaを起動する前に*の展開を行ってしまいます。そのため、起動されるプログラム自身では*の展開を抑止できません。

事前にシェルのコマンドで*の展開を抑止しておけば、コマンド行の*がそのままプログラムに渡るようになります。

例えばbashだと
keisan>set -o noglob
keisan>java Main 2 3 *

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)

これで試してください。

Q*ワイルドカードについて

import java.awt.* としても、awt以下のもろもろのクラスがロード
されません。 Graphics とか Font とか ひとつずつimport しないといけないのですが何故でしょうか? * を使えるようにするには
どうすれば良いのでしょうか? ご指南くださいませ。

Aベストアンサー

作成したクラス名がColor3というので、ふと思ったのですが・・・。どっかにColorクラスがあって、そっちを見に行ってませんか?

そのColor3.javaファイルがおいてあるフォルダの中に、「Color.java」というファイルがありませんか。更には「Color.class」というファイルが作成されていませんか? もしあったとしたら、それらをフォルダの外に出せば、問題解決します。
 Javaでは、同じ名前のクラスが複数あった場合は、同じ階層にあるほうを優先して読み込んでしまいます。システムライブラリにあるクラスと同じ名前のクラスを作るのは厳禁なのです。

とりあえず、フォルダの中身をチェックしてみては?

QExcelのファイル{(75行*1列の1セット)*33セット分}データをVBで扱う方法を教えてください。

Excelのファイル{(75行*1列の1セット)*33セット分}データをVBで扱う方法を教えてください。

ExcelのデータをVBに読み込んで、それを並び替えするプログラムを作ろうとしています。
なのですが、ExcelのデータをVBに読み込む方法がわかりません。
ネットで調べたらopen,close,get・・とあるのですが、いまいちわかりません。

どなたか教えてください。

Aベストアンサー

Open/Close では実質的に言って無理です。
( Excel のファイル構造がわかればできるかもしれませんが・・・)
VB6 と VB.NET では少し記述方法が違いますが、VB.NET だと

Dim eb As Object
Dim es As Object
Dim strFileName As String

strFileName = "C:\Temp\Book1.xls"
eb = GetObject(strFileName)
es = eb.Sheets(1)
MessageBox.Show(es.Cells(2, 1).value, "Test", MessageBoxButtons.OK, MessageBoxIcon.Information)
eb = Nothing

のような感じで Excel のような感じで内容を読むことができます。
(上の例では 1番目のシートの A列 2行目のセルの内容をメッセージボックスに表示します。)
並び替えですが、Excel 上で並び替えをすることも可能ですが、
読み込んでから並び替えをするなら、
VB6の場合:並び替え関数を自作(並び替えのアルゴリズムはクイックソートやヒープソートなどいろいろありますので、検索して調べてみてください。どこかに VB のサンプルがあるかも。)
VB.NETの場合:Array.Sort が使用可能です。

Open/Close では実質的に言って無理です。
( Excel のファイル構造がわかればできるかもしれませんが・・・)
VB6 と VB.NET では少し記述方法が違いますが、VB.NET だと

Dim eb As Object
Dim es As Object
Dim strFileName As String

strFileName = "C:\Temp\Book1.xls"
eb = GetObject(strFileName)
es = eb.Sheets(1)
MessageBox.Show(es.Cells(2, 1).value, "Test", MessageBoxButtons.OK, MessageBoxIcon.Information)
eb ...続きを読む

Qワイルドカードの特殊文字

ワイルドカードの特殊文字

ワイルドカードについて調べていますが、以下の事がわかりませんので、お教え頂けませんでしょうか?

質問1:
ワイルドカードは下記の2つ以外には特殊文字はないのでしょうか?
* 任意の長さの文字(0文字以上)
? 任意の1文字(0文字も可)

質問2:
ワイルドカードについて一般的に定められたガイドラインみたいなのはあるのでしょうか?

例えば、Wordでは、[ ]は、指定した文字のいずれか1文字を検索するみたいです。
http://office-qa.com/Word/wd211.htm

しかしながらコマンドプロンプトでは[]は使えないと思います。

ワイルドカードの仕様があり、アプリ毎に実装者が独自の拡張をおこなっているのでしょうか?

質問3:
ワイルドカードと正規表現の違いは厳密にいうとなんでしょうか?

Aベストアンサー

>> 質問1:

(SQL)
% 任意の長さの文字(0文字以上)
_ 任意の1文字(0文字も可)

>> 質問2:

決められた仕様はないと思います。
それぞれのソフトがそれぞれの文化の中で形成してきたものを使っていると思います。

>> 質問3:
>> ワイルドカードと正規表現の違いは厳密にいうとなんでしょうか?

文化ごとに仕様がバラバラなので厳密には言えないのですが、大きな物として制御の複雑さの違いがあります。
例えばワイルドカードは文字列と*?による部分的な一致しか扱えませんが、正規表現は更に細かく「数値ならば」「文字の範囲内(外)ならば」「行頭(行末)ならば」などの指定ができます。

Qワイルドカード 読み方

初歩的な質問かもしれないですが

*
?
#

全部のワイルドカードの読み方を知りたいのですが

アスタリスク
ハテナ
シャープ
であってますか?

ハテナはクエスチョンマーク
シャープはイゲタでしょうか?

Aベストアンサー

意味が通じれば何でも構わないのかもしれない・・・のかもです。

基本は押さえておきたいのなら↓
http://homepage1.nifty.com/tabotabo/ccc/kigo.htm

# はシャープ(♯)ではないです。
フラット(♭)が「なんで俺はキーボードに無いの?」と気を悪くしています。

でも、MS社のAccess2010のVBAのヘルプにも
『倍精度浮動小数点数型の型宣言文字はシャープ記号 (#) です。』
としっかり載っているくらいですから。。。 (^_^;)


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

人気Q&Aランキング

おすすめ情報