InStr関数は文字列の中に指定した文字列が存在するか確認したい時に使用します。
例えば、入力チェック等で利用できます。
InStrの構文
InStr([ start ], string1, string2, [ 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関数について記載させて頂きました。
少しでも皆様の参考になれば幸いです。