InStr関数 文字列検索

中級VBA

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関数 もあります。

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