InStr関数の使い方と注意点
InStr関数は、文字列の中で特定の文字や単語の位置を返す関数です。
構文
InStr([ 開始位置,] 文字列, 検索文字列 [, 比較方法])
- 開始位置: 検索を開始する位置(省略可。省略時は1から)
- 文字列: 検索対象の文字列
- 検索文字列: 探したい文字や語句
- 比較方法: 検索方法の指定(省略可。省略時は0)0:バイナリ、1:テキスト
一般的には開始位置と比較方法を省略した形が良く使われます。
InStr( 文字列, 検索文字列)
使用例
開始位置、比較方法を省略する場合
こちらの例では各文字列中の第2引数の文字の位置を返します。
Sub Sample()
Dim mystring1 As String
mystring1 = "Abcd"
Debug.Print "半角英字 : " & InStr(mystring1, "c")
Dim mystring2 As String
mystring2 = "Abcd"
Debug.Print "全角英字 : " & InStr(mystring2, "c")
Dim mystring3 As String
mystring3 = "あいうえ"
Debug.Print "ひらがな : " & InStr(mystring3, "う")
Dim mystring4 As String
mystring4 = "亜伊宇江"
Debug.Print "漢字 : " & InStr(mystring4, "宇")
Dim mystring5 As String
mystring5 = "!?#/"
Debug.Print "半角記号 : " & InStr(mystring5, "#")
Dim mystring6 As String
mystring6 = "!?#/"
Debug.Print "全角記号 : " & InStr(mystring6, "#")
Dim mystring7 As String
mystring7 = "1234"
Debug.Print "半角数字 : " & InStr(mystring7, "3")
Dim mystring8 As String
mystring8 = "1234"
Debug.Print "全角数字 : " & InStr(mystring8, "3")
Dim mystring9 As String
mystring9 = "A b C" ' Aとbの間に半角スペース、bとcの間に全角スペース
Debug.Print "スペース : " & InStr(mystring9, "b")
End Sub
▶ 出力結果
半角英字 : 3
全角英字 : 3
ひらがな : 3
漢字 : 3
半角記号 : 3
全角記号 : 3
半角数字 : 3
全角数字 : 3
スペース : 3
開始位置を指定する場合
こちらの例ではexcel
という文字列中にe
が出現する位置をの1
文字目から探します。
Sub Sample()
Dim mystring As String
mystring = "excel"
Debug.Print Instr(1, mystring, "e")
End Sub
▶ 出力結果
1文字目のe
がヒットし、1
と返ってきます。
1
次の例ではexcel
という文字列中にe
が出現する位置をの3
文字目から探します。
Sub Sample()
Dim mystring As String
mystring = "excel"
Debug.Print Instr(3, mystring, "e")
End Sub
▶ 出力結果
1文字目のe
は検索対象外の為、次にe
が出現する4
が返ってきます。
4
比較方法を指定する場合
比較方法の指定には0
,1
または、それぞれを表す定数
を使用します。
値 | 定数 | 内容 |
---|---|---|
0 | vbBinaryCompare | バイナリ比較 |
1 | vbTextCompare | テキスト比較 |
省略 | Option Compare の設定に従う |
例
Sub Sample()
Dim mystring As String
mystring = "Excel"
Debug.Print InStr(1, mystring, "e", 0)
End Sub
バイナリ比較とテキスト比較
バイナリ比較とテキスト比較の違いは主に英字の大文字と小文字を区別するかにあります。
比較対象 | vbBinaryCompare | vbTextCompare |
---|---|---|
英字の大文字と小文字 | 区別する | 区別しない |
ひらがなとカタカナ | 区別する | 区別する |
全角と半角 | 区別する | 区別する |
例えば以下のExcel
という文字列からe
の位置を出力するコードを実行した場合、
Sub Sample()
Dim mystring As String
mystring = "Excel"
Debug.Print "バイナリ比較 : " & InStr(1, mystring, "e", 0)
Debug.Print "テキスト比較 : " & InStr(1, mystring, "e", 1)
End Sub
▶ 出力結果
バイナリ比較が大文字小文字を区別するため4
と出力されるのに対し、
テキスト比較は大文字小文字を区別しないため1
と出力されます。
バイナリ比較 : 4
テキスト比較 : 1
比較方法を省略した場合
比較方法を省略した場合、Option Compare
の設定に従います。(設定していない場合はバイナリ比較)
Option CompareにはText
またはBinary
をしていします。
例えば以下の例ではOption Compare
の設定をBinary
にしています。
Option Compare Binary
Sub Sample()
Dim mystring As String
mystring = "Excel"
Debug.Print InStr(1, mystring, "e")
End Sub
▶ 出力結果
InStrではバイナリ比較が行われるため、
1文字目のE
はヒットせず、4文字目のe
がヒットします。
4
また、Option Compare
を設定している場合でも、引数の入力により個別に比較方法を変えることもできます。
Option Compare Binary
Sub Sample()
Dim mystring As String
mystring = "Excel"
Debug.Print "Instr1 : " & InStr(1, mystring, "e")
Debug.Print "Instr2 : " & InStr(1, mystring, "e", 1)
End Sub
▶ 出力結果
Instr1 : 4
Instr2 : 1
⚠️注意
検索文字列が含まれていない場合は0を返します。
Sub Sample()
Dim mystring As String
mystring = "Excel"
Debug.Print InStr(mystring, "a")
End Sub
▶ 出力結果
0
検索文字列が複数含まれる場合は最初の出現位置を返します。
Sub Sample()
Dim mystring As String
mystring = "excel"
Debug.Print InStr(mystring, "e")
End Sub
▶ 出力結果
1
その他のVBA関数
【Excel VBA】VBAでよく使う関数一覧&基本の使い方