InStr関数 検索文字の何番目に出現するか
ExcelVBAのInStr関数は、文字列の中で、指定した文字列が最初に見つかった位置を返す関数です。
この使い方を応用して、検索したい文字列があるかを判断するのによく使います。
非常に使い勝手が良いため筆者は良く使います。ここでは、InStr関数の使い方を見ていきましょう。
InStr関数の簡単な使い方
v=InStr(“ABCDEF“,”C“)
InStr関数で2つの引数を指定した場合は、第一引数が検索される文字列、第二引数が検索する文字列になります。第一引数の文字列を第二引数の文字列で検索し、見つかった最初の位置を返します。 見つからなかった場合は、0が返ります。
戻り値は、数値が返ることになりますが、NULLが返ることもあるためVariant型となります。
単に文字列検索をしたい場合は、以下のようにします。
Sub InStrTestCode01()
Dim result
Dim myStr As String
Dim myKey As String
myStr = " aAaa"
myKey = "a"
result = InStr(myStr, myKey)
Debug.Print result '2
End Sub
検索される文字は、半角空白スペースから始まっていますので、検索する文字 a が最初に出現するのは2番目になります。
ただ単に、文字列が含まれているか検索したい場合は、以下のようになります。この使い方が最もよく使われます。
Sub InStrTestCode02()
Dim result
Dim myStr As String
Dim myKey As String
myStr = " aAaa"
myKey = "a"
If InStr(myStr, myKey) > 0 Then
Debug.Print "含まれている"
Else
Debug.Print "含まれていないない"
End If
End Sub
InStr関数の構文
InStr関数の構文は以下のようになっています。[]は省略することができます。
InStr([start, ]string1, string2[, compare])
start(省略可)
引数を3つ以上指定した場合は、検索を開始する位置を指定できます。
string1
検索対象となる文字列を指定します。
string2
検索したい文字列を指定します。
compare(省略可)
「vbBinaryCompare」全角半角、大文字小文字を区別するモードと、
「vbTextCompare」全角半角、大文字小文字を区別しないモードを指定できます。
省略すると、「vbBinaryCompare」全角半角、大文字小文字を区別するモードとなります。
※startを省略して、compareを指定することはできません。
※string1、string2がNullの時、戻り値はNULLを返します。
InStr関数のサンプルコード
3つの引数を指定する例です。
3番目の文字から検索を始めて a は何番目に現れるかを返します。
3文字目はAですが、大文字小文字を区別するので、4 が返ります。
Sub InStrTestCode03()
Dim result
Dim myStr As String
Dim myKey As String
myStr = " aAaa"
myKey = "a"
result = InStr(3, myStr, myKey)
Debug.Print result '4
End Sub
次のコードは、4つの引数を指定しています。
最後の大文字小文字を区別しない「vbTextCompare」をセットするためには、1番目の引数を省略できません。そこで、1をセットして一番目から検索する事を指定してやります。
今度は、myKeyを大文字のAにしています。大文字小文字を区別しないので、最初に来る2を返します。
Sub InStrTestCode04()
Dim result
Dim myStr As String
Dim myKey As String
myStr = " aAaa"
myKey = "A"
result = InStr(1, myStr, myKey, vbTextCompare)
Debug.Print result '2
End Sub
このコードで、InStrの第一引数を省略したり、0にするとエラーとなります。
InStr関数は前方から検索する関数ですが、後方から検索する InStrRev関数 もあります。