VBAのInStrRev関数で文字列検索を極めよう!初心者向け完全ガイド

当ページのリンクには広告 (Amazonアソシエイト含む) が含まれています。
アイキャッチ

「VBAで文字列を後ろから検索する方法がわからない…」
こんなお悩みをお持ちではありませんか?


・特定の文字列を後方から検索したい

・通常のInStr関数との違いを理解したい

その場合は、VBAの「InStrRev関数」を
使用すると解決します!


そんな方にオススメなのが VBAの「InStrRev関数」 です!

InStrRev関数は、文字列内で特定の文字や単語を後ろから検索するための関数です。
通常のInStr関数とは異なり、最後に一致する文字列の位置を取得できるため、メールアドレスのドメイン部分を抽出したり、ログデータの最新エラー箇所を特定するなど、様々な用途で活用できます。

この記事では、InStrRev関数の基本的な使い方から、実務で役立つ応用例まで初心者でもわかりやすく解説します!
ぜひ最後までお読みいただき、VBAスキルアップの一助にしてくださいね。


【 この記事の概要 】

よく使う度
難しさ
覚えておくと安心度

VBAをしっかり学びたいけれど、「どこから始めればいいかわからない」と迷っていませんか?

そんな方には、UdemyのVBA講座がおすすめです。

動画での丁寧な解説や、実践的な学習スタイルで、初心者でも無理なく基礎から応用まで習得できます。
自己学習を進める上で、何度でも繰り返し見返せる講座は非常に心強い味方になりますよ!

多彩な講座から自分に合った講座を探そう!
UdemyでVBAを検索
UdemyでVBAを検索 画像出典:Udemy

\  自分のペースで学べるVBA講座はこちら  /

目次

この記事でできるようになること

スポンサーリンク

VBAの「InStrRev関数」でできること | 文字列検索の基本と応用

そもそも「InStrRev関数」を使用するとどんなことができるの?

InStrRev関数は、Excel VBAで文字列を操作する際にに便利な関数です。
文字列を後ろから検索したい場合に欠かせない関数です。

通常のInStr関数では対応しづらい後方からの検索が可能なため、文字列の最後に現れる特定の文字列を見つける場面で大いに活躍します。

InStrRev関数でできること

InStrRev関数は、Excel VBAで文字列の中から特定の文字や単語を後ろから検索し、その位置を取得するための関数です。

この関数を使用することで、文字列操作をさらに効率化し、データ検索や抽出を柔軟に行うことができます。

できること
  • 文字列内の特定の文字や単語を後方から検索可能
    • 文字列の後ろから検索を開始し、最初に一致する文字列を探すことができます。
  • 検索対象の文字列の位置を取得可能
    • 特定の文字列が後方から見たときに、何文字目にあるかを取得します。
  • 大文字と小文字の区別も設定可能
    • 引数で設定することで、大文字小文字を区別して検索するかどうかを指定できます。

具体的にどんなことができるのか?

  • 文字列の最後に出現する特定の文字や単語を検索できる
    • (例:メールアドレスの最後の「@」の位置を取得)
  • 後ろから見た検索位置を取得できる
    • (例:「確認」という単語が文章のどこにあるかを特定)
  • 特定のキーワードを含むデータを抽出できる
    • (例:Excelのデータから「エラー」を含む行だけを見つける)

InStrRev関数は、これらの操作をわずかなコードで実現でき、初心者でも簡単に扱うことができます。

次のセクションでは、InStrRev関数の基本的な使い方を具体的なコード例とともに詳しく解説していきます。
まずは基礎からしっかり理解していきましょう!

VBAの「InStrRev関数」の基本を解説 | 後ろから文字列を検索できます

InStrRev関数は、指定した文字列を後ろから検索し、最初に一致した位置を返す関数です。

通常のInStr関数が文字列を左から右に検索するのに対し、InStrRev関数は右から左に検索します。

これにより、文字列の最後に現れる特定の文字や単語を検索する場面で役立ちます。


InStrRev関数の検索方向

InStrRev関数の基本構文

InStrRev関数の構成
スクロールできます
引数名必須/任意説明
StringCheck必須検索対象の文字列
StringMatch必須検索する文字列
Start任意検索を開始する位置(デフォルトは文字列の最後から)
Compare任意検索時に大文字と小文字を区別するかどうか
vbBinaryCompare=区別する、vbTextCompare=区別しない)
※デフォルトはvbBinaryCompareで、大文字と小文字を区別します

InStrRev関数は、「StringCheck」の中で「StringMatch」を右から左(後ろから前)に検索し、最初に見つかった文字の位置を返します。
検索の開始位置を指定することで、検索範囲を調整することも可能です。

検索結果として、StringMatchが見つからない場合は「0」を返します。

ワイルドカードを使用しての検索については「注意4. ワイルドカードは使えない」を参照ください。


さらに詳細な仕様については、Microsoft公式のInStrRev 関数を参照してください。

InStrRev関数の基本的な使用例

以下のコードでは、InStrRev関数を使用して「Excel VBA InStrRev関数を学ぼう!」という文字列(text変数)内で、「VBA」という文字列を後ろから検索します。

大文字・小文字を区別する場合のコード例

Sub InstrRevExample()
    Dim text As String
    Dim position As Long
    
    text = "Excel VBA InStrRev関数を学ぼう!VBAで効率化!"
    position = InStrRev(text, "VBA")
    
    If position > 0 Then
        MsgBox "最後の文字列『VBA』は位置 " & position & " にあります。"
    Else
        MsgBox "文字列『VBA』は見つかりませんでした。"
    End If
End Sub

大文字・小文字を区別しない場合のコード例

InStrRev関数では、「compare」引数に vbTextCompare を指定することで、大文字小文字を区別せずに検索することができます。

以下はその例です。

Sub InstrRevExampleIgnoreCase()
    Dim text As String
    Dim position As Long
    
    text = "Excel VBA InStrRev関数を学ぼう!vbaで効率化!"
    position = InStrRev(text, "vba", , vbTextCompare)
    
    If position > 0 Then
        MsgBox "最後の文字列『vba』(大文字小文字を区別しない)は位置 " & position & " にあります。"
    Else
        MsgBox "文字列『vba』は見つかりませんでした。"
    End If
End Sub

解説
  • 「VBA」という3文字を後ろから検索した場合の結果
    • この例では、「VBA」という完全一致する文字列を検索します。
      後方から検索を開始し、最初に一致した位置を返します。
    • 検索結果
      • 「VBA」は文字列の最後(24文字目)から始まるため、InStrRev関数は「24」を返します。
    • 部分一致の場合
      • 例えば、「VB」や「BA」を後ろから検索する場合、それぞれの文字列が見つかる位置を返します。
        ただし、「VBA」という3文字全てが一致しなければ、「VBA」とは判定されません。
  • 「compare」引数の違い
    • 大文字小文字を区別する場合(デフォルト)
      • InStrRev関数の 「compare」引数を省略する、または vbBinaryCompare を指定すると、大文字小文字を区別します。
        • 例:「VBA」を検索 → 見つかる(24文字目)。
        • 例:「vba」を検索 → 見つからない。
    • 大文字小文字を区別しない場合
      • vbTextCompare を指定すると、大文字小文字を区別せずに検索を行います。
        • 例:「vba」や「VBA」どちらでも見つかる(24文字目)。

InStr関数とInStrRev関数の簡単な比較

InStrRev関数には、似た機能を持つInStr関数という関数があります。
この関数は、文字列を検索する方向がInStrRev関数とは異なります。

以下の表で違いを簡単に比較してみましょう。

スクロールできます
関数名検索方向主な用途
InStr左から右最初に一致する文字列の位置を取得したい場合
InStrRev右から左最後に一致する文字列の位置を取得したい場合

InStrRev関数が後ろから順に検索して最初の一致箇所を見つけるのに対し、InStr関数は前から検索して最後の一致箇所を見つけます。

あわせて読みたい
【初心者向け】VBAのInStr関数を完全解説!基本から応用まで 「Excel VBAで文字列を検索する方法がわからない…」こんなお悩みをお持ちではありませんか? ・指定したキーワードが文字列の何文字目にあるか知りたい・Instr関数って...
スポンサーリンク

VBA「InStrRev関数」を使う際の注意ポイント3選

InStrRev関数を正しく活用するためには、いくつか押さえておきたいポイントがあります。
ここでは、初心者が陥りやすいミスやエラーを防ぐための注意点を、わかりやすく解説します。

この記事を読めば、InStrRev関数を正確かつ効率的に使いこなすためのコツがつかめますよ!

注意1: 見つからなかった場合は「0」を返す

InStrRev関数は、検索する文字列(StringMatch)が見つからない場合、「0」を返します。

この特性を考慮しないと、条件分岐や計算で意図しない動作を引き起こす可能性があります。

対策コード例

Sub CheckStringNotFound()
    Dim text As String
    Dim position As Long

    text = "Excel VBA InStrRev関数を学ぼう!"
    position = InStrRev(text, "Python") '// 見つからないケース

    If position = 0 Then
        MsgBox "文字列『Python』は見つかりませんでした。"
    Else
        MsgBox "文字列『Python』は位置 " & position & " にあります。"
    End If
End Sub
見つからなかった場合は「0」を返すの結果
ポイント
  • 戻り値が「0」の場合の処理を必ず記述する。
  • 検索結果を条件分岐でチェックしておくと、エラーを防ぐことができます。

注意2: デフォルトでは大文字と小文字を区別する

InStrRev関数は、引数 Compare を指定しない場合、大文字と小文字を区別しますvbBinaryCompare がデフォルト)。

そのため、検索対象の文字列が大文字小文字を含む場合は、Compare 引数を適切に設定する必要があります。

対策コード例

Sub CaseInsensitiveSearch()
    Dim text As String
    Dim position As Long

    text = "Excel VBA InStrRev関数を学ぼう!"
    position = InStrRev(text, "vba", , vbTextCompare) '//大文字小文字を区別しない

    If position > 0 Then
        MsgBox "大文字小文字を区別しない検索で『vba』が見つかりました!位置: " & position
    Else
        MsgBox "『vba』は見つかりませんでした。"
    End If
End Sub
デフォルトでは大文字と小文字を区別するの結果
ポイント
  • 大文字小文字を区別したくない場合は、vbTextCompare を指定する。
  • 検索する文字列がどのような形式で入力されるかを考慮する。

注意3: 検索の開始位置を意識する

InStrRev関数では、Start 引数を指定しない場合、検索は文字列の最後から始まります

必要に応じて、検索を開始する位置を指定することで、検索範囲を柔軟にコントロールできます。

対策コード例

Sub SearchWithStartPosition()
    Dim text As String
    Dim position As Long

    text = "Excel VBA InStrRev関数を学ぼう!VBAで効率化!"
    position = InStrRev(text, "VBA", 15) '//15文字目から後ろを検索

    If position > 0 Then
        MsgBox "15文字目から検索して『VBA』が見つかりました!位置: " & position
    Else
        MsgBox "15文字目以降に『VBA』は見つかりませんでした。"
    End If
End Sub
ポイント
  • デフォルトで文字列の最後から検索が始まることを理解する。
  • 必要に応じて Start 引数を設定し、検索範囲をカスタマイズする。

注意4. ワイルドカードは使えない

InStrRev関数は、Like演算子のようにワイルドカード(*?)を直接サポートしていません
そのため、曖昧な検索や特定のパターンを探す場合には工夫が必要です。

例えば、文字列を後ろから検索したい場合にはInStrRev関数を使用できますが、「任意の文字列が一致する」ような柔軟な検索には、Like演算子や正規表現を使用するのが効果的です。

以下にそれぞれの方法を簡単に紹介します。

Like演算子を使ったワイルドカード検索例

以下のコードでは、Like演算子を使って「*.txt」(「.txt」で終わる文字列)を検索しています。

Sub WildcardSearchExample()
    Dim text As String
    Dim isMatch As Boolean
    
    text = "example_file.txt"
    
    '// Like演算子でワイルドカード検索(例:「.txt」で終わるか)
    isMatch = text Like "*.txt"
    
    If isMatch Then
        MsgBox "文字列『" & text & "』は条件に一致しました!(.txtで終わります)"
    Else
        MsgBox "文字列『" & text & "』は条件に一致しませんでした。"
    End If
End Sub
Like演算子を使ったワイルドカード検索結果
ポイント
  • Like演算子を使うと、「.txt」で終わる文字列を簡単に検索できます。
  • ワイルドカード「*」や「?」を使って柔軟なパターン検索が可能です。
    ただし、検索の方向を指定する機能はないため、後ろから検索したい場合はInStrRevと併用する必要があります。

正規表現を使用した高度な検索

正規表現(RegExp)を使用すると、さらに高度で複雑なパターンマッチングが可能です。
特に、文字列を後ろから確認する場合でも、正規表現の柔軟性を活かして正確にマッチさせることができます。

以下は、正規表現を使って文字列が「.txt」で終わるかを確認する例です。

Sub RegexSearchExample()
    Dim regex As Object
    Dim text As String
    Dim isMatch As Boolean
    
    text = "example_file.txt"
    
    '// 正規表現オブジェクトの作成
    Set regex = CreateObject("VBScript.RegExp")
    regex.Pattern = "\.txt$" ' パターン:「.txt」で終わる
    regex.IgnoreCase = True
    
    '// 正規表現で一致するか確認
    isMatch = regex.Test(text)
    
    If isMatch Then
        MsgBox "文字列『" & text & "』は有効な形式です。(.txtで終わります)"
    Else
        MsgBox "文字列『" & text & "』は条件に一致しませんでした。"
    End If
End Sub
正規表現を使用した高度な検索結果
ポイント
  • 正規表現を使うと、特定の形式(例:「.txtで終わる文字列」)を確認できます。
  • InStrRevやLike演算子では対応できない、複雑な条件やフォーマットの検証が可能です。
  • 後方一致や特定のパターンの検索には非常に便利です。

Like演算子と正規表現の違い

スクロールできます
機能Like演算子正規表現
柔軟性ワイルドカードを使った単純な検索複雑な条件やフォーマットの検証が可能
用途単純なパターンマッチングメールアドレスや特定フォーマットの文字列検証
「*.txt」で「.txt」で終わる文字列を検索ファイル名の形式やメールアドレス形式の確認
スポンサーリンク

VBAのInStrRev関数を使った使用例をご紹介

ここからは、VBAのInStrRev関数の具体的な使用例を紹介します。

以下に紹介する使用例は、すべてコピペしてすぐに実行できるコードです。
気になる例は、ぜひご覧いただき、実際に実行してみてください。

VBAをしっかり学びたいけれど、「どこから始めればいいかわからない」と迷っていませんか?

そんな方には、UdemyのVBA講座がおすすめです。

動画での丁寧な解説や、実践的な学習スタイルで、初心者でも無理なく基礎から応用まで習得できます。
自己学習を進める上で、何度でも繰り返し見返せる講座は非常に心強い味方になりますよ!

多彩な講座から自分に合った講座を探そう!
UdemyでVBAを検索
UdemyでVBAを検索 画像出典:Udemy

\  自分のペースで学べるVBA講座はこちら  /

使用例1: メールアドレスからドメイン以外を抜き出す

このコードでは、配列に格納された複数のメールアドレスから、ドメイン部分(例:@gmail.com)を除いた部分を抜き出し、結果をデバッグウィンドウに表示します。

コード例 | メールアドレスからユーザー名部分を抽出

Sub ExtractUsername()
    Dim emailList As Variant
    Dim username As String
    Dim position As Long
    Dim i As Long

    '// 検索対象のメールアドレス配列
    emailList = Array("tanaka@gmail.com", "yamada@yahoo.co.jp", "sato@gmail.com", "nakamura@hotmail.com")

    '// 配列内の各メールアドレスからユーザー名部分を抽出
    For i = LBound(emailList) To UBound(emailList)
        position = InStrRev(emailList(i), "@") '//「@」の位置を後ろから検索
        If position > 0 Then
            username = Left(emailList(i), position - 1) '//「@」の前の部分を取得
            Debug.Print username '結果をデバッグウィンドウに表示
        Else
            Debug.Print "『" & emailList(i) & "』は有効なメールアドレスではありません。"
        End If
    Next i
End Sub

処理結果

メールアドレスからドメイン以外を抜き出すの結果

コードの動作概要

STEP
メールアドレスの配列を設定

検索対象のメールアドレスを emailList 配列に格納します。
この配列には複数のメールアドレスが含まれます。

STEP
ドメインの区切り文字「@」を検索

各メールアドレスに対して InStrRev 関数を使用し、「@」の位置を後方から検索します。

STEP
ユーザー名部分を抽出

Left 関数を使用して、「@」より前の部分(ユーザー名部分)を抽出します。

STEP
抽出結果を出力

抽出したユーザー名部分をデバッグウィンドウに出力します。
「@」が見つからない場合は、有効なメールアドレスではない旨をデバッグウィンドウに表示します。

このコードで使用している機能

スクロールできます
機能名説明
Array配列を作成して複数のメールアドレスを格納します。
InStrRev「@」の位置を後方から検索し、ユーザー名部分とドメイン部分を区切ります。
Left指定した位置までの文字列を取得します(ユーザー名部分の抽出に使用)。
For Next配列内のすべてのメールアドレスを順番に処理します。
Debug.Print抽出結果をデバッグウィンドウに出力します。

1行ずつコードを解説

クリック」してコードの詳細解説を見る
  1. Sub ExtractUsername()
    • サブルーチン「ExtractUsername」を定義します。
      このサブルーチンでは、メールアドレスからユーザー名部分を抽出します。
  2. Dim emailList As Variant
    • メールアドレスを格納する配列「emailList」を宣言します。
  3. Dim username As String
    • ユーザー名部分を一時的に格納するための文字列変数「username」を宣言します。
  4. Dim position As Long
    • 「@」の位置を格納するための変数「position」を宣言します。
  5. Dim i As Long
    • 配列を処理するためのループ用カウンタ変数「i」を宣言します。
  6. emailList = Array(“tanaka@gmail.com”, “yamada@yahoo.co.jp”, “sato@gmail.com”, “nakamura@hotmail.com”)
    • 配列「emailList」に複数のメールアドレスを格納します。
  7. For i = LBound(emailList) To UBound(emailList)
    • 配列の最初の要素(LBound(emailList))から最後の要素(UBound(emailList))までループを開始します。
  8. position = InStrRev(emailList(i), “@”)
    • 現在のメールアドレス(emailList(i))内で「@」を後方から検索し、その位置を変数「position」に格納します。
  9. If position > 0 Then
    • 「@」が見つかった場合の条件分岐を開始します。
  10. username = Left(emailList(i), position – 1)
    • Left関数を使用して、「@」の直前までの文字列(ユーザー名部分)を変数「username」に格納します。
  11. Debug.Print username
    • 抽出したユーザー名をデバッグウィンドウに表示します。
  12. Else
    • 条件分岐の「@」が見つからなかった場合の処理を開始します。
  13. Debug.Print “『” & emailList(i) & “』は有効なメールアドレスではありません。”
    • @」が見つからなかった場合、有効なメールアドレスではない旨をデバッグウィンドウに表示します。
  14. End If
    • 条件分岐を終了します。
  15. Next i
    • 次の配列要素を処理するためにループを続行します。
  16. End Sub
    • サブルーチンを終了します。

総括・ポイント

このコードは、メールアドレスの文字列からドメイン部分を除外し、ユーザー名部分のみを抽出する応用例です。

メールアドレス処理やデータ解析において、特定の部分を取り出す操作に役立ちます。

ポイント
  • 実務での活用例
    • ユーザー名リストの生成や、メールアカウントの整理などに応用可能。
  • 初心者向け学習
    • 配列操作、InStrRev 関数、Left 関数の学習に最適。
スポンサーリンク

この記事のまとめ

この記事では、VBAの「InStrRev関数」を使用して、文字列を後ろから検索する方法やその実用的な使い方を解説しました。

InStrRev関数を活用することで、文字列内の最後に現れる特定の文字列を簡単に検索でき、データ操作や抽出が効率的に行えるようになります。
これにより、Excel業務をさらに効率化し、手作業によるミスを減らすことが可能です。

ポイントのおさらい

さらに学ぶために

この記事でVBAのInStrRev関数を学んだら、次は関連する便利なVBA機能を学んでみましょう。

InStrRev関数を使いこなすことで得られる知識を、以下の機能や方法と組み合わせると、Excel作業をさらに効率化できます。

あわせて読みたい
サイトマップ このページは、本サイトの記事を分かりやすくまとめました。ぜひご覧ください。 目次 「VBA」を見る 「Officeスクリプト」を見る 「ワークシート関数」を見る 「JavaScr...
スポンサーリンク
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次