【Excel VBA】InStrで謎の「型が一致しません」エラーが出た

Excel VBA

はじめに

ExcelのVBAで、ある文字列が他の文字列の中に含まれているかどうかを判定するのに、InStr()関数を使っていました。

先日、とあるプロジェクトで大文字と小文字を区別しないで欲しいという依頼があったので、InStr()の第三引数にvbTextCompareを指定したのですが、ここで「型が一致しません」という謎のエラーが。

vbTextCompareを指定する時は最初の引数が必要

まず、InStr関数の使い方は以下となっています。

InStr([ start ], string1, string2, [ compare ])

ここで、compareに渡せる値は以下。

vbUseCompareOption(-1)Option Compare ステートメントの設定を使用して比較
vbBinaryCompare(0)バイナリで比較(デフォルト)
vbTextCompare(1)テキストで比較
大文字、小文字の区別なし
全角、半角の区別なし
https://www.sejuku.net/blog/31263より

なので、大文字と小文字を区別したくない場合(つまりHelloとhelloを同一とみなす)は第三引数にvbTextCompareを指定すれば良さそう。

また、[]で囲まれている第一引数は省略可能、なはずなので、以下のように使っていました。

string1 = "Hello World."
string2 = "hello"

If(InStr(string1, string2, vbTextCompare)) Then
    // 処理
End If

ところが、これを実行すると謎の「型が一致しません」というエラーが出る、、、

全く意味が分からず、vbTextCompareの部分を1とかに置き換えてみてもうまくいかない。

色々試してみると、第一引数に何かを渡せばエラーがなくなることが判明した。

こんな感じで。

If(InStr(1, string1, string2, vbTextCompare)) Then
    // 処理
End If

念のため、Googleで調べてみると、確かにマイクロソフトの公式ドキュメントでも記載されていました、、、

PartDescription
startOptional. Numeric expression that sets the starting position for each search. If omitted, search begins at the first character position. If start contains Null, an error occurs. The start argument is required if compare is specified.
https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/instr-functionより

同じような処理なら、Like演算子でもできるので、そっちを使っておけばこんなところでつまずかなかったのに、、、

コメント

タイトルとURLをコピーしました