InStr関数を使う際の比較モードとは?

このQ&Aのポイント
  • エクセルVBAでInStr関数を使う際には、どの比較モードを選べばいいのでしょうか?
  • InStr関数を使う際には、vbBinaryCompareとvbTextCompareの2つの比較モードを選択することができます。
  • vbBinaryCompareは、大文字と小文字を区別し、バイナリ比較を行います。一方、vbTextCompareは、大文字と小文字を区別せずにテキスト比較を行います。
回答を見る
  • ベストアンサー

InStr関数を使う際は

エクセルvbaなのですが、InStr関数を使う際は、どの比較モードを使えばいいのでしょうか? Sub あ() Dim myStr As String myStr = "あいうえお" Debug.Print InStr(1, myStr, "い", vbBinaryCompare) Debug.Print InStr(1, myStr, "い", vbTextCompare) Debug.Print InStr(1, myStr, "い", vbUseCompareOption) 'エラーになる Debug.Print InStr(1, myStr, "い", vbDatabaseCompare) 'エラーになる End Sub vbBinaryCompareとvbTextCompareならエラーになりませんが この二つの違いが判りません。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.2

> vbBinaryCompareとvbTextCompareならエラーになりませんが > この二つの違いが判りません。 vbBinaryCompare 大文字と小文字が区別されます。 vbTextCompare 大文字と小文字は区別されませんし、ひらがなカタカナも区別されません。 sub test() Dim myStr As String myStr = "abcd" Debug.Print InStr(1, myStr, "A", vbBinaryCompare) Debug.Print InStr(1, myStr, "A", vbTextCompare) myStr = "あいうえお" Debug.Print InStr(1, myStr, "い", vbBinaryCompare) Debug.Print InStr(1, myStr, "イ", vbBinaryCompare) Debug.Print InStr(1, myStr, "イ", vbTextCompare) end sub vbUseCompareOption Option Compare Text もしくは Option Compare Binary 上記の指定をプロシージャ外で指定して利用するようなりますが、実際変数定義されていませんのでエラーになります。VBA以外で利用できるのを誤記しているのかもしれません。

trwnjengidn
質問者

お礼

ありがとうございました。

その他の回答 (2)

  • kkkkkm
  • ベストアンサー率65% (1615/2454)
回答No.3

訂正: 変数定義されていません ↓ vbUseCompareOption定数がシステムで定義されていません

trwnjengidn
質問者

お礼

ありがとうございました。

noname#212058
noname#212058
回答No.1

以下のページにそれぞれの意味が解説されています。 http://note.phyllo.net/?eid=1106064 vbDatabaseCompare は Access のみ使用可(Excel では使用不可)なのでエラーになります。 vbUseCompareOption を指定した場合は "Option Compare" の設定になりますが、これはデフォルトでは Binary モード(vbBinaryCompare)なので通常であれば使えるはずです。試しに手元の Excel 2010 で試したら動きました。本当に動かないですか?

trwnjengidn
質問者

お礼

ありがとうございました。

関連するQ&A

  • 引数 compareについて

    エクセルで Sub sample() Debug.Print InStr(1, "abcde", "C", vbTextCompare) End Sub このコードを実行する際、vbTextCompareはどういう役目を果たしてるのでしょうか? Sub sample() Debug.Print InStr(1, "abcde", "C") End Sub や Sub sample() Debug.Print InStr(1, "abcde", "C", vbBinaryCompare) End Sub にすると0が返りますが、 なぜ0が返るのかわかりません。 ヘルプを読むと、vbTextCompareは 「テキスト モードの比較を行います。」と書いてありますが、それがどういう意味なのか分かりません。 Sub sample() Debug.Print InStr(1, "abcde", "C", vbDatabaseCompare) End Sub にすると、エクセルで実行しているからかエラーになりました。 Sub sample() Debug.Print InStr(1, "abcde", "C", vbUseCompareOption) End Sub これだと、コンパイルエラーになりました。

  • VBA 複数の文字のコードを一気に返すには

    Sub test1() Dim myStr As String myStr = "abc" Debug.Print Asc("a") Debug.Print Asc(myStr) End Sub このコードは、どちらも97が返るのですが、 myStrは3文字です。 3文字全ての文字コードを返すには、 Sub test2() Dim myStr As String myStr = "abc" Debug.Print Asc(Mid(myStr, 1, 1)) & Asc(Mid(myStr, 2, 1)) & Asc(Mid(myStr, 3, 1)) End Sub のようにするしかないのでしょうか?

  • InStr関数、InStrRev関数

    Sub Sample() Debug.Print InStr(1, "abcde", "d") Debug.Print InStrRev("abcde", "d") End Sub どちらの関数も結果が4で、同じなのですが、InStrRevは2になるべきではないですか? なぜ左から検索してるのでしょうか?

  • 値渡し?参照渡し?をやりたい

    「#00B7EF」を「&HEFB700」にする関数を作ってるのですが 初心者のため躓いてしまいました。 コードは ++++++++++++++++++++++++++++++++++++++++++++++++++++ Sub 色コード() myStr = "#00B7EF" Debug.Print 色コード変換(myStr) End Sub Function 色コード変換() Dim myStr1 As String Dim myStr2 As String Dim myStr3 As String myStr1 = Mid(myStr, 2, 2) myStr2 = Mid(myStr, 4, 2) myStr3 = Mid(myStr, 6, 2) 色コード変換 = "&H" & myStr3 & myStr2 & myStr1 End Function ++++++++++++++++++++++++++++++++++++++++++++++++++++ を作ったのですが、 End Functionを過ぎてから 実行時エラー_型が一致しません。(Error13) になります。 Sub 色コード()の時に、型を宣言してないからでしょうか? しかし、 Function 色コード変換(as String) にすると赤くなってしまいます。 ご教授よろしくお願いします。

  • 変数の中の特定の文字の出現回数を取得したい。

    Sub test01() Dim mystr As String mystr = "a1a2a3" Debug.Print WorksheetFunction.CountA(mystr, "a") End Sub のようなコードを作りました。 mystrの中に3つの「a」があります。 なので、CountA関数を使えば、3が返ると思ったのですが、2が返りました。 なぜ3ではなく2が返るのでしょうか? CountA関数でなくてもいいので、 変数の中の特定の文字の出現回数を取得するコードを教えてください。

  • ifステートメント 大文字も小文字も区別なく

    Sub test() Dim moji As String moji = "a" If moji = "A" Then MsgBox "Aかaです" End If End Sub これだと、変数が小文字のaだからmsgboxが表示されません。 小文字も大文字も区別なく認識させるにはどうすればいいでしょうか? バイナリモードになってるようです。 Replace関数の場合は、vbTextCompareを付ければ Sub Sample() Dim moji As String moji = "a" Debug.Print Replace(moji, "A", "b", , , vbTextCompare) End Sub このように大文字小文字区別なく置換できますが このような事をifステートメントでやる方法を教えてください。

  • 二次元配列のVBA

    二次元配列のVBAの書き方がよくわからないのですが、 私が作ったサンプルプログラムのSub 二次元()において 二次元配列で表すにはどうすればいいのでしょうか? Sub 二次元()では 配列を格納する変数はtmpしか使っていませんが もう一つ配列を格納する用の変数を作ればいいのでしょうか? 数字とアルファベットは別々に取り出したいです。 ----------------------------------------------------- Sub 一次元() Dim myStr As String Dim tmp As Variant Dim i As Long For i = 1 To 5 myStr = myStr & "," & i Next myStr = Mid(myStr, 2) tmp = Split(myStr, ",") For i = LBound(tmp) To UBound(tmp) Debug.Print tmp(i) Next i End Sub Sub 二次元() Dim myStr As String Dim tmp As Variant Dim i As Long For i = 1 To 5 myStr = myStr & "," & i & "と" & Chr(64 + i) Next myStr = Mid(myStr, 2) tmp = Split(myStr, ",") For i = LBound(tmp) To UBound(tmp) Debug.Print tmp(i) Next i End Sub

  • vbaで配列に値を格納する場合

    vbaで配列に値を格納する場合 変数の宣言はどちらを使った方が良いのでしょうか? Sub Sample1() Dim i As Long Dim myStr As String Dim tmp() As String myStr = "a,i,u,e,o" tmp = Split(myStr, ",") End Sub か Sub Sample1() Dim i As Long Dim myStr As String Dim tmp As Variant myStr = "a,i,u,e,o" tmp = Split(myStr, ",") End Sub でも問題なく動くのですが、 Variant型での宣言はあまりしない方が良いですか? あと Dim tmp() As String ならエラーにならないのですが Dim tmp As String だとエラーになってしまう理由がよくわからないので教えて頂けますか?

  • アクセスのクエリでSplit関数は使えないのですか

    レコードにaaa/bbb/cccと入っていて、 クエリで SELECT Split([テーブル1]![フィールド1],"/") AS test FROM テーブル1; とすると、 式に未定義関数 <関数名> があります。(Error 3085) になります。 VBAでやるとしたら Sub test() Dim str As String str = "aaa/bbb/ccc" Debug.Print Split(str, "/")(1) End Sub のような事がしたいのですが クエリでは無理なのでしょうか?

  • 文字列の最後が空白なら削除する

    Sub test() Dim mystr As String mystr = "abc " If Right(mystr, 1) = " " Then Debug.Print Left(mystr, Len(mystr) - 1) End If End Sub これで、最後の1文字が空白なら削除できるのですが、 "abc "のように、最後に空白が2つある場合が対応できないのですが そういう場合でも対応できるコードはありますか?

専門家に質問してみよう