0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Excel VBA】InStr関数|文字列の位置を検索する方法と注意点

Last updated at Posted at 2025-07-07

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でよく使う関数一覧&基本の使い方

参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?