VBAである文字列が含まれている位置を探す場合はInStr関数を使用します。
以下、具体的な使用方法と共にご説明します。
InStr関数の構文
InStr( “検索対象となる文字列”, “検索する文字列”)
<コード>
Dim myStr As String '検索対象となる文字列を格納' Dim findStr As String '検索したい文字列を格納' Dim findNo As Integer '検索文字が見つかった場所を格納' myStr = Range("A1") findStr = "特許" findNo = InStr(myStr, findStr) MsgBox myStr & "の" & findNo & "文字目に" & findStr & "があります。"
<実行例>
例では“東京特許許可局”という文字列の3文字目から”特許”という文字列が存在していることが分かります。
では、A1セルの値を“東京特許許可局許可局長”、findStrの値(検索文字)を“許可”へと変更した場合
どのような結果になるでしょうか。
<実行例>
指定した文字列の中には“許可“という文字列が2か所存在しますが、結果は5文字目と表示されています。
つまり、InStr関数は文字列の1文字目から検索を開始して最初に検索文字が見つかった位置を返しているのです。
検索文字が含まれていない場合
検索対象に検索文字が含まれていない場合、InStr関数は0を返します。
というわけで、if文を使用すると検索文字がヒットしないパターンの処理を行うことができます。
<コード>
Dim myStr As String Dim findStr As String Dim findNo As Integer myStr = Range("A1") findStr = "新宿" findNo = InStr(myStr, findStr) If findNo = 0 Then '検索文字がヒットしなかった場合' MsgBox myStr & "の中に" & findStr & "は含まれていません。" Else 'ヒットした場合' MsgBox myStr & "の" & findNo & "文字目に" & findStr & "があります。" End If
<実行例>
InStr関数とLeft、Right関数を組み合わせた例
InStr関数は他の関数と組み合わせると非常に便利な関数です。
以下の例では@マークの前後で文字列を分割しています。
<コード>
Dim myStr As String Dim findStr As String Dim findNo As Integer myStr = Range("A1") findStr = "@" findNo = InStr(myStr, findStr) Range("C4") = Left(myStr, findNo - 1) '@より前の文字列' Range("C5") = Right(myStr, Len(myStr) - findNo) '@より後の文字列'
<実行例>
@より前の文字列を取り出す場合にはLeft関数を使用します。
指定した文字列の左から@の一文字前までを抜き出すため、InStrで取得した@の位置より
マイナス1の文字数を指定します。
そして@より後の文字列を取り出す場合はRignt関数(Mid関数でも可)を使用します。
指定した文字列の右から(全文字数-@までの文字数)分を抜き出すため
Len関数(全文字数を取得する関数)も組み合わせています。
まとめ
InStr関数を使用すると指定した文字列の中に含まれている検索文字の位置を調べることができます。
さらに、そこで取得した情報を他の関数と組み合わせると、ファイルのパスからファイル名だけを
抜き出す等の作業に非常に便利です。
ぜひInStr関数を取り入れてより複雑な処理をするコードの作成に役立ててください。
【おすすめ記事】
➡習得必須!VBAを教われるスクールBEST5
➡VBAの本・参考書の評判
➡業務効率をアップする!コピペで動くVBA5選
➡【VBA上達事例⑫】コツはコードの丸暗記!使ったVBAの書籍は?