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
には、以下のような値を設定できます。
値 | 比較方法 | 説明 |
---|---|---|
0 | Binary | 大文字と小文字を区別する |
1 | Text | 大文字と小文字を区別しない |
例:大文字と小文字の違いを無視した検索
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の位置)
用途に応じてInStr
とInStrRev
を使い分けましょう。
よくあるエラーと対処法
エラー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での文字列操作がグッとスマートになります。
ぜひ、今日からコードに取り入れて活用してみてください!