VBAのInStr関数を完全マスター!文字列検索の基本と応用をやさしく解説

VBA(Visual Basic for Applications)を使っていると、「ある文字が含まれているかどうかを調べたい」という場面によく出会います。
そんなときに便利なのがInStr関数です。

InStr関数は、指定した文字列の中から別の文字列を探し出すための機能で、「検索」の役割を果たしてくれます。
この記事では、InStr関数の基本的な使い方から、実践的な応用方法まで、分かりやすく解説していきます。
初心者の方でもすぐに使えるよう、具体的なコード例を交えながら説明していきますので、ぜひ最後までご覧ください。


InStr関数とは?基本の使い方

InStr関数は、ある文字列の中に、特定の文字列が含まれているかを調べて、その位置を返してくれる関数です。
書き方は以下のようになります。

InStr([start], string1, string2, [compare])

引数の意味

  • start(省略可):検索を始める位置(省略すると1)
  • string1:検索対象の文字列
  • string2:検索する文字列
  • compare(省略可):比較方法(バイナリかテキストか)

例:

Dim result As Integer
result = InStr("こんにちは世界", "世界")
' → 結果は6("世"の位置)

このように、”こんにちは世界”の中で”世界”が見つかった位置「6」が返されます。
もし見つからなければ、結果は0になります。


比較方法(Compare)の違い

InStr関数の第4引数であるcompareには、以下のような値を設定できます。

比較方法説明
0Binary大文字と小文字を区別する
1Text大文字と小文字を区別しない

例:大文字と小文字の違いを無視した検索

Dim result As Integer
result = InStr(1, "Hello World", "world", vbTextCompare)
' → 結果は7

このように、vbTextCompareを使うと、大文字・小文字の違いを無視して検索できます。


start引数を使って検索位置を変える

InStr関数の第1引数startを使うと、検索開始位置を指定できます。

Dim result As Integer
result = InStr(5, "ABCABCABC", "C")
' → 結果は6(5文字目以降の"C"を検索)

繰り返し処理などで2回目以降の出現箇所を調べたいときに便利です。


InStr関数と条件分岐を組み合わせて使う

実際のVBAでは、InStr関数を使って条件分岐させることがよくあります。
たとえば「文字列に特定の語句が含まれていれば処理を行う」ような場合です。

If InStr("これはテストです", "テスト") > 0 Then
MsgBox "『テスト』が含まれています!"
Else
MsgBox "『テスト』は含まれていません。"
End If

このように、戻り値が0より大きいかどうかで分岐処理ができます。


応用編:InStrを使って特定文字列を削除

InStrを使えば、特定の文字列を探して、文字列を加工することも可能です。

Dim text As String
Dim pos As Integer
text = "abc123def"
pos = InStr(text, "123")

If pos > 0 Then
text = Left(text, pos - 1) & Mid(text, pos + 3)
End If

MsgBox text ' → "abcdef"

この例では、”123″を削除しています。Left関数とMid関数を組み合わせて使うのがポイントです。


InStrRevとの違いも知っておこう

InStrは前から検索しますが、後ろから検索するにはInStrRevという関数があります。

Dim pos As Integer
pos = InStrRev("ABCABCABC", "C")
' → 結果は9(最後のCの位置)

用途に応じてInStrInStrRevを使い分けましょう。


よくあるエラーと対処法

エラー1:戻り値の扱いミス

If InStr("文字列", "検索") Then ' ← NG

これは一見正しそうですが、戻り値が0のときもFalseとは判断されないことがあります。
正しくは以下のように書きましょう。

vbaコピーする編集するIf InStr("文字列", "検索") > 0 Then

エラー2:null値や空文字の扱い

空文字やnull値を扱うと、意図しない動作をすることがあります。

InStr("", "A") ' → 0
InStr(Null, "A") ' → エラーになる可能性あり

nullの可能性があるときは、IsNull()でチェックしてから使いましょう。


まとめ:InStrでVBAの文字列処理がグッと楽になる

InStr関数は、文字列処理において非常に基本かつ強力なツールです。
ちょっとした条件分岐から文字の削除、検索位置の判定など、さまざまな場面で活躍します。

使い方のポイントをもう一度整理しておきましょう。

  • 基本はInStr(対象文字列, 検索文字列)
  • 見つからない場合は0が返る
  • 比較方法に注意(大文字・小文字)
  • 戻り値を条件分岐に活用
  • InStrRevで後ろから検索も可能

これらをマスターすれば、VBAでの文字列操作がグッとスマートになります。
ぜひ、今日からコードに取り入れて活用してみてください!

タイトルとURLをコピーしました