【Excel VBA】文字列に指定文字が含まているかを判断する関数(InStr)

当ページのリンクには広告が含まれている可能性があります。
文字列が含まれるか

こんにちは、ユーキです。

今回は、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関数に関しては、以下の記事を参照ください。

あわせて読みたい
【Excel VBA】文字列を抜き出す関数(Mid、Left、Right) こんにちは、ユーキです。 今回は、VBAで文字列を抜き出す関数(Mid、Left、Right)を紹介します。 【文字列を抜き出す関数】 文字列を抜き出す関数はいくつかあります...

指定文字列が含まれるかを判断する

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)についての紹介でした。

Point
  • InStr関数は、指定した文字列が何番目に現れるかがわかる関数
  • Mid関数、Left関数、Right関数を組合せて使うと、文字の切り取りの汎用性が高まる
  • 文字列が含まれる、含まれないの判断に使うことが可能

少しでもお役に立てば、幸いです。

スポンサーリンク
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

旅好き職業プログラマ。文系大学卒業後、ITソフトウエア開発会社に勤務してプログラミング言語を学ぶ。現在は転職し、プロジェクトマネージャ的ポジションで生産管理システムの開発にあたる。
得意言語は、VB、VB.NET、C#.NET、Java、SQLなど。

目次