VBA INSTR – 文字列中の文字を検索する

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

masahiro yoshida

Last updated on 2月 5, 2023

INSTR関数

VBAのInstr関数は、ある文字列が別の文字列の中にあるかどうかをチェックします。テキストが見つからない場合は0を返し、そうでない場合は、テキストが見つかった文字位置を返します。 Instr関数は、 完全一致を実行します。代わりに、VBAのLike演算子を使用すると、ワイルドカードを使用した部分一致/パターンマッチを実行できます。

Instrの例

次のコードは、”Look in this string” という文字列から “Look” という単語を検索します。テキストが最初の位置で見つかったので、Instr関数は1を返します。

Sub FindSomeText()
  MsgBox InStr("Look in this string", "Look")
End Sub

この2番目の例では、文字列が7番目の位置で見つかったので、7を返します。

Sub FindSomeText2()
  MsgBox InStr("Don't Look in this string", "Look")
End Sub

重要! Instr関数は、デフォルトで大文字と小文字を区別します。つまり、”look “と “Look “はマッチしません。大文字と小文字を区別しないようにするには、以下をお読みください。

Instr の構文

Instr関数の構文は次のとおりです。

Instr( [start], string, substring, [compare] )

[start] (オプション) – このオプションの引数は、検索の開始位置です。1を入力すると、1番目の位置から、5を入力すると5番目の位置から検索を開始します。(省略した場合は1番目の位置から検索します。)重要! INSTR関数は、[start]の位置からではなく、1番目から数えて文字の位置を計算します。

string – 検索対象となる文字列。

substring – 検索する文字列。

[compare] (オプション) – デフォルトでは、Instrは大文字と小文字を区別します。この引数を設定すると、Instrは大文字と小文字を区別しないようにすることができます。

引数(vb値)

引数(整数) 説明
vbBinaryCompare

0

(デフォルト) 大文字と小文字を区別する

vbTextCompare

1

大文字と小文字を区別しない

vbDatabaseCompare

2

MS Accessのみ。データベースの情報を使って比較を行う。

Instrの開始位置

Instrの開始位置は、検索を開始する文字の位置を指定します。 ただし、Instrの出力は常に1からカウントされることに注意してください。 この例では、最初のBをスキップするために、開始位置を3に設定しています。

Sub Instr_StartPosition()
  MsgBox InStr(3, "ABC ABC", "B")
End Sub

2番目のBは文字列の6番目の文字なので、結果は6となります。

大文字と小文字を区別しないINSTR

VBAのデフォルトでは、”L “は “l “と区別して扱われます。つまり、VBAは大文字と小文字を区別します。これは、すべてのテキスト関数に当てはまります。 VBAで大文字と小文字を区別しないようにするには、[compare]引数を1またはvbTextCompareに設定します。

Public Sub FindText_IgnoreCase()
  MsgBox InStr(1, "Don't Look in this string", "look", vbTextCompare)
End Sub

また、コードモジュールの先頭に Option Compare Text を追加することもできます。

Option Compare Text
Option Compare Text

Public Sub FindText_IgnoreCase2()
  MsgBox InStr("Don't Look in this string", "look")
End Sub

Option Compare Text は、そのモジュール内のすべてのコードに影響を与えます。私は個人的には、大文字小文字の違いを気にすることはないので、テキストを扱うモジュールの一番上にこれを置いています。

InstrRev関数

Instr関数は左から検索する関数です。しかし、InstrRev関数を使えば、右から検索することができます。 InstrRev 関数は Instr 関数と非常によく似た働きをします。

Sub FindSomeText_FromRight()
  MsgBox InStrRev("Look in this string", "Look")
End Sub

Instr関数と同じように、”Look “のインスタンスは1つだけなので、これは1を返します。しかし、2つ目の “Look “を追加すると、一番右の “Look “の位置が返されることが分かります。

Sub FindSomeText_FromRight()
  MsgBox InStrRev("Look in this string Look", "Look")
End Sub

次は、さらにInstrの例題を確認します。

VBAのコーディングが簡単に

VBAのコードをオンラインで検索するのはもうやめましょう。AutoMacro – A VBA Code Builderを使えば、初心者が最小限のコーディング知識でゼロから手順をコーディングできるだけでなく、ベテランのユーザーも時間を節約するに役立つ多くの機能を備えています! VBA Instr もっと詳しく

InStringの例

文字列が部分文字列を含む場合

ここでは、Ifステートメントを使用して、文字列がテキストの部分文字列を含むかどうかをテストします。

Public Sub FindSomeText()

If InStr("Look in this string", "look") = 0 Then
   MsgBox "含まれます"
Else
   MsgBox "少なくとも1つ含まれます"
End If

End Sub

セル内の文字列を検索する

セル内の文字列を検索することもできます。

Sub Find_String_Cell()
    If InStr(Range("B2").Value, "Dr.") > 0 Then
        Range("C2").Value="Doctor"
    End If
End Sub

vba find text in cell セル 文字列 検索

セルの範囲をループして検索することもできます。

Sub Search_Range_For_Text()
Dim cell As Range

    For Each cell In Range("b2:b6")
        If InStr(cell.Value, "Dr.") > 0 Then
            cell.Offset(0, 1).Value = "Doctor"
        End If
    Next cell
    
End Sub

search range for text セル範囲 文字列 検索

文字列の中のある文字の位置を調べる

このコードは、文字列内の1文字の位置を検索し、その位置を変数に代入します。

Sub Find_Char()
  Dim n As Long
  n = InStr("Here Look Here", "L")
End Sub

文字列から単語を検索する

このコードは、文字列から単語を検索します。

Sub Search_String_For_Word()
    Dim n As Long
    n = InStr("Here Look Here", "Look")
  
    If n = 0 Then
        MsgBox "単語は見つかりませんでした"
    Else
        MsgBox n & " の位置で単語が見つかりました"
    End If
End Sub

変数に文字列が含まれる場合

このコードは、文字列変数に文字列が含まれているかどうかをテストします。

Sub Variable_Contains_String()
    Dim str As String
    str = "Look Here"
    
    If InStr(str, "Here") > 0 Then
        MsgBox "Here Found!"
    End If
End Sub

InstrとLeft関数

Instrは、Left、Right、Len、Midなどの他のテキスト関数と組み合わせて、テキストの一部を抽出することができます。 Left関数を使えば、文字列の前にあるテキストを出力することができます。

Sub Instr_Left()
    Dim str As String
    Dim n As Long
    
    str = "Look Here"
    
    n = InStr(str, "Here")
    
    MsgBox Left(str, n - 1)

End Sub

Microsoft Access VBAでのInstrの使用

上記の例はすべて、Access VBAでもExcel VBAとまったく同じように動作します。

vba instr access

より詳しく知りたい方は、こちらの記事をご覧ください:VBAのテキスト関数

<<VBAのサンプルに戻る

vba-free-addin

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(No installation required!)

Free Download

Return to VBA Code Examples