文字列の内容 InStr関数

InStr関数は文字列の中に指定した文字列が存在するか確認したい時に使用します。

例えば、入力チェック等で利用できます。

InStrの構文

InStr([ start ], string1string2, [ compare ])

InStr([検索開始位置], 文字列, 指定した文字列, [文字列の比較方法])

[]内は省略可能です。

InStr関数を使用すると指定した文字列の位置が数値で返されます。

InStr関数の使用例

・InStr関数内に文字列を直接設定

・文字列に指定した文字列が無い場合

・指定した文字列が複数存在する場合

・InStr関数で開始位置を設定

・InStr関数で比較方法を設定

・セルから文字列を取得してセルに設定

繰り返し処理(指定した文字列)

・繰り返し処理(文字列、指定した文字列)

・繰り返し処理(文字列、指定した文字列、比較方法を設定)

の内容で説明していきます。

InStr関数内に文字列を直接設定

Sub InStr1()

    MsgBox InStr("abcde", "c") & "番目にあります"

End Sub

指定した文字列が”c”なので3が返されます。

文字列に指定した文字列が無い場合

Sub InStr2()

    MsgBox InStr("abcde", "f") & "番目にあります"

End Sub

指定した文字列が”f”なので見つからず0が返されます。

指定した文字列が複数存在する場合

Sub InStr3()

    MsgBox InStr("abcdec", "c") & "番目にあります"

End Sub

3番目と6番目に指定した文字列の”c”があります。

最初に見つけた位置を返すため、3が返されました。

InStr関数で開始位置を設定

Sub InStr4()

    MsgBox InStr(4, "abcdec", "c") & "番目にあります"

End Sub

3番目と6番目に指定した文字列の”c”があります。

検索する開始位置を4に設定しています。

開始位置が4のため6番目の”c”の位置を返します。

InStr関数で比較方法を設定

比較方法ですが、大文字小文字を比較するしないの設定が出来ます。

比較方法を設定する場合は、開始位置も設定しないとエラーになります。

0 or vbBinaryCompare で大文字小文字を比較します。

Sub InStr5()

    MsgBox InStr(1, "abcdeC", "C", 0) & "番目にあります"

End Sub
Sub InStr6()

    MsgBox InStr(1, "abcdeC", "C", vbBinaryCompare) & "番目にあります"

End Sub

3番目に”c”、6番目に”C”があり、”C”を指定します。

6番目の”C”の位置が返されます。

1 or vbTextCompare で大文字小文字を比較しません。

Sub InSt7()

    MsgBox InStr(1, "abcdeC", "C", 1) & "番目にあります"

End Sub
Sub InStr8()

    MsgBox InStr(1, "abcdeC", "C", vbTextCompare) & "番目にあります"

End Sub

3番目に”c”、6番目に”C”があり、”C”を指定します。

大文字小文字を比較しないため、3番目の”c”の位置が返されます。

開始位置を設定しない時に発生するエラー

Sub InStrErr()

    MsgBox InStr("abcdeC", "C", vbTextCompare) & "番目にあります"

End Sub

開始位置を設定していません。

処理を実行時にこのエラーが発生します。

セルから文字列を取得してセルに設定

B2の文字列をC2の文字列が検索して結果をD2に表示させます。

Sub InStr9()
    Dim str, find, rep As String
    str = Cells(2, 2)
    find = Cells(2, 3)
    
    Cells(2, 4) = InStr(str, find) & "番目にあります。"

End Sub

“c”が3番目にあるので、3の値が返されてD2に結果が表示されました。

繰り返し処理(指定した文字列)

B2の文字列を取得して、C列にある指定した文字列が含まれるか確認します。

Sub InStr10()

    Dim str, kekka As String
    Dim find() As String
    Dim i, retuNum As Integer
    str = Cells(2, 2)
    '指定した文字列の列番号を設定します
    retuNum = 3
    '指定した文字列のリストを設定します
    find() = リストの設定(retuNum)
    
    i = 1
    kekka = ""
    '指定した文字列をリスト分繰り返します
    For Each Var In find
        '指定した文字列が存在するか確認します。

        If InStr(str, find(i - 1)) <> 0 Then
            kekka = kekka & find(i - 1) & "が" & InStr(str, find(i - 1)) & "番目にあります。"
        End If
        
        i = i + 1
    Next
    
    If kekka = "" Then
        kekka = "指定した文字列がありません。"
    End If

    Cells(2, 4) = kekka

End Sub

Functionを使用して、リストの設定という関数みたいな物を作成しています。

リストの設定の内容は指定した文字列のリストを作成して返しています。

Function リストの設定(ByVal retuNum As Integer) As String()
    
    Dim list() As String
    Dim i As Integer
    Dim kazu As Long
    
    kazu = Cells(1000, retuNum).End(xlUp).Row
    ReDim list(kazu - 2)
    
    For i = 2 To kazu
        list(i - 2) = Cells(i, retuNum)
    Next i
    
    リストの設定 = list()
    
End Function

指定した文字列の”c”と”bc”があるため結果がD2に表示されます。

繰り返し処理(文字列、指定した文字列)

B列の文字列をC2の文字列が検索して、結果をD列に表示させます。

Sub InStr11()
    
    Dim kekka As String
    Dim str() As String
    Dim find() As String
    Dim i, j, retuNum As Integer
        
    '文字列の列番号を設定します
    retuNum = 2
    '文字列のリストを設定します
    str() = リストの設定(retuNum)
    
    '指定した文字列の列番号を設定します
    retuNum = 3
    '指定した文字列のリストを設定します
    find() = リストの設定(retuNum)
    
    i = 1
    '文字列をリスト分繰り返します
    For Each Var In str
        j = 1
        kekka = ""
        '指定した文字列をリスト分繰り返します
        For Each Var2 In find
            '指定した文字列が存在するか確認します
            If InStr(str(i - 1), find(j - 1)) <> 0 Then
                kekka = kekka & find(j - 1) & "が" & InStr(str(i - 1), find(j - 1)) & "番目にあります。"
            End If
            
            j = j + 1
        Next
        
        If kekka = "" Then
            kekka = "指定した文字列がありません。"
        End If
        
        Cells(i + 1, 4) = kekka
        i = i + 1
    Next
    
End Sub

リストの設定の内容は指定した文字列のリストと文字列のリストを作成して返しています。

Function リストの設定(ByVal retuNum As Integer) As String()
    
    Dim list() As String
    Dim i As Integer
    Dim kazu As Long
    
    kazu = Cells(1000, retuNum).End(xlUp).Row
    ReDim list(kazu - 2)
    
    For i = 2 To kazu
        list(i - 2) = Cells(i, retuNum)
    Next i
    
    リストの設定 = list()
    
End Function

それぞれの行で指定した文字列が存在するか確認して、結果を表示しています。

繰り返し処理(文字列、指定した文字列、比較方法を設定)

大文字小文字を比較しない方法で複数の文字列と指定した文字列の確認を行います。

C列に大文字のBを設定しています。

Sub InStr12()

    Dim kekka As String
    Dim str() As String
    Dim find() As String
    Dim i, j, retuNum As Integer
        
    '文字列の列番号を設定します
    retuNum = 2
    '文字列のリストを設定します
    str() = リストの設定(retuNum)
    
    '指定した文字列の列番号を設定します
    retuNum = 3
    '指定した文字列のリストを設定します
    find() = リストの設定(retuNum)
    
    i = 1
    '文字列をリスト分繰り返します
    For Each Var In str
        j = 1
        kekka = ""
        '指定した文字列をリスト分繰り返します
        For Each Var2 In find
            '指定した文字列が存在するか確認します。
            If InStr(1, str(i - 1), find(j - 1), 1) <> 0 Then
                kekka = kekka & find(j - 1) & "が" & InStr(1, str(i - 1), find(j - 1), 1) & "番目にあります。"
            End If
            
            j = j + 1
        Next
        
        If kekka = "" Then
            kekka = "指定した文字列がありません。"
        End If
        
        Cells(i + 1, 4) = kekka
        i = i + 1
    Next
    
End Sub

InStr関数を使用している所で開始位置と比較方法を1に設定しています。

Function リストの設定(ByVal retuNum As Integer) As String()
    
    Dim list() As String
    Dim i As Integer
    Dim kazu As Long
    
    kazu = Cells(1000, retuNum).End(xlUp).Row
    ReDim list(kazu - 2)
    
    For i = 2 To kazu
        list(i - 2) = Cells(i, retuNum)
    Next i
    
    リストの設定 = list()
    
End Function

大文字小文字を比較しないで表示されました。

“ぁぃぅぇぉ”は小文字判定されないので注意してください。

今回はInStr関数について記載させて頂きました。

少しでも皆様の参考になれば幸いです。

Published by

不明 のアバター

yuuya

 現在フリーランスとして仕事を行っております。 新卒でIT企業に入社して、某ECサイトの開発、某銀行の滞納者管理システムの開発、某携帯キャリアのアクセス位置制御システムの開発などの色々なシステム開発に携わって参りました。 体調を崩して他業種に転職をしましたがIT技術を生かし、業務の効率化を提案して2時間かかる作業を2分で終らせられる様に作業の自動化などを行ってきました。  私は働きすぎて体を壊したので私の知識で、少しでも皆様の帰宅時間を速める事が出来るなら幸いです。

コメントを残す