この記事ではInStr関数の使い方と注意点について解説します。
他のよく使うVBA関数一覧はこちら。
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でよく使う関数一覧&基本の使い方