はじめに
ExcelのVBAで、ある文字列が他の文字列の中に含まれているかどうかを判定するのに、InStr()関数を使っていました。
先日、とあるプロジェクトで大文字と小文字を区別しないで欲しいという依頼があったので、InStr()の第三引数にvbTextCompareを指定したのですが、ここで「型が一致しません」という謎のエラーが。
vbTextCompareを指定する時は最初の引数が必要
まず、InStr関数の使い方は以下となっています。
InStr([ start ], string1, string2, [ compare ])
ここで、compareに渡せる値は以下。
vbUseCompareOption(-1) | Option Compare ステートメントの設定を使用して比較 |
vbBinaryCompare(0) | バイナリで比較(デフォルト) |
vbTextCompare(1) | テキストで比較 大文字、小文字の区別なし 全角、半角の区別なし |
なので、大文字と小文字を区別したくない場合(つまり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で調べてみると、確かにマイクロソフトの公式ドキュメントでも記載されていました、、、
Part | Description |
---|---|
start | Optional. 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. |
同じような処理なら、Like演算子でもできるので、そっちを使っておけばこんなところでつまずかなかったのに、、、
コメント