こんにちは、ユーキです。
今回は、VBAで文字列に指定文字が含まているかを判断する関数(InStr)を紹介します。
文字列に指定文字が含まているかを判断する関数
文字列に指定文字が含まているかを判断するには、InStr関数を使用します。
基本的な書き方
さっそく、サンプルコードを書いてみます。
Dim idx As Integer
idx = InStr("たわしをわしづかみ", "わし")
Debug.Print idx ’2が出力される
idx = InStr(3, "たわしをわしづかみ", "わし")
Debug.Print idx ’5が出力される
第1引数が省略可能なので、検索対象の文字列と、探し出す文字列の指定のみで使うことができます。一番オーソドックスな書き方になると思います。
「たわしをわしづかみ」という文字列から、「わし」という文字列が何番目にあるかが返ってきます。
指定文字列が見つからない場合
指定した文字列が見つからない場合は、0が返ります。エラーにはなりません。
Dim idx As Integer
idx = InStr("たわしをわしづかみ", "あ")
Debug.Print idx '0が出力される
idx = InStr(4, "たわしをわしづかみ", "た")
Debug.Print idx '0が出力される
指定した文字列が最後に出現する位置を知る
InStr関数は指定した文字列の先頭からの検索でした。指定した文字列の最後から検索したい場合には、InStrRev関数を使用します。
Dim idx As Integer
idx = InStrRev("たわしをわしづかみ", "あ")
Debug.Print idx '0が出力される
idx = InStrRev("たわしをわしづかみ", "わ")
Debug.Print idx '5が出力される
idx = InStrRev("たわしをわしづかみ", "わ", 4)
Debug.Print idx '2が出力される
指定した文字列が見つからない場合に、0が返るのはInStr関数と同じです。検索開始位置を指定したい場合は第3引数を指定します。
InStr関数の具体的な使い方(使用場面)
InStr関数がどういう場面で使われるのか、具体的な事例を交えて紹介します。
指定文字列が何番目にあるかを調べて文字列抜き取る
指定文字列が何番目に現れるかをInStr関数で調べて、Mid関数、Left関数、Right関数を使います。
- 「エラーが発生しました(エラー:XXXXX)」という文字列から、エラーコードを抜き出す
- エラーコードは、「エラー:」の後に続く5文字
上記のことを実現した場合、InStr関数と、Mid関数を組合せで実現可能です。
Dim msg As String
Dim idx As Integer
Dim txt As String
msg = "エラーが発生しました(エラー:ERR01)"
idx = InStr(msg, "エラー:")
txt = Mid(msg, idx + 4, 5) ’+4は「エラー:」の文字数分を加算
Debug.Print txt ’「ERR01」が出力される
Mid関数、Left関数に関しては、以下の記事を参照ください。
指定文字列が含まれるかを判断する
InStr関数関数は、指定文字が含まれているかを判断するのにも適しています。
- エラーメッセージに「SQLエラー」が含まれている場合だけ処理をしたい
- エラーメッセージの例:検索処理でエラーが発生しました(SQLエラー:XXXXX)
上記は、InStr関数だけで実現可能です。
Dim msg As String
msg = "検索処理でエラーが発生しました(SQLエラー:XXXXX)"
If InStr(msg, "SQLエラー") > 0 Then
Debug.Print "検索失敗"
End If
InStr関数では、指定した文字列が何番目に出現するか、出現しない場合は0が戻ることを利用します。InStr関数の戻りが0より大(1以上)であれば、指定した文字列が含まれていると判断できます。
指定文字列が含まれいないことを判断する
InStr関数では、指定した文字列が含まれていないことを確認することもできます。
- メッセージに「エラー」が含まれていない場合だけ処理をしたい
- メッセージの例:検索処理が終了しました(Code:000)
Dim msg As String
msg = "検索処理が終了しました(Code:000)"
If InStr(msg, "エラー") <= 0 Then
Debug.Print "処理終了"
End If
InStr関数では、指定した文字列が出現しない場合は0が戻ることを利用します。0以下であれば、指定した文字列が含まれていないことが確認できます。なお、条件判定は「=0」でも問題ありません。
まとめ
今回は、文字列に指定文字が含まているかを判断する関数(InStr)についての紹介でした。
- InStr関数は、指定した文字列が何番目に現れるかがわかる関数
- Mid関数、Left関数、Right関数を組合せて使うと、文字の切り取りの汎用性が高まる
- 文字列が含まれる、含まれないの判断に使うことが可能
少しでもお役に立てば、幸いです。