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

・特定の文字列を後方から検索したい
・通常のInStr関数との違いを理解したい



その場合は、VBAの「InStrRev関数」を
使用すると解決します!
そんな方にオススメなのが VBAの「InStrRev関数」 です!
InStrRev関数は、文字列内で特定の文字や単語を後ろから検索するための関数です。
通常のInStr関数とは異なり、最後に一致する文字列の位置を取得できるため、メールアドレスのドメイン部分を抽出したり、ログデータの最新エラー箇所を特定するなど、様々な用途で活用できます。
この記事では、InStrRev関数の基本的な使い方から、実務で役立つ応用例まで初心者でもわかりやすく解説します!
ぜひ最後までお読みいただき、VBAスキルアップの一助にしてくださいね。
【 この記事の概要 】
よく使う度 | |
難しさ | |
覚えておくと安心度 |
VBAをしっかり学びたいけれど、「どこから始めればいいかわからない」と迷っていませんか?
そんな方には、UdemyのVBA講座がおすすめです。
動画での丁寧な解説や、実践的な学習スタイルで、初心者でも無理なく基礎から応用まで習得できます。
自己学習を進める上で、何度でも繰り返し見返せる講座は非常に心強い味方になりますよ!


\ 自分のペースで学べるVBA講座はこちら /
この記事でできるようになること
- VBAのInStrRev関数はどんなことができるのか?確認を行う
- InStrRev関数の基本構成を習得する
- InStrRev関数の注意ポイントを把握する
- InStrRev関数のよく使われる使用例を確認する
VBAの「InStrRev関数」でできること | 文字列検索の基本と応用



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



InStrRev関数は、Excel VBAで文字列を操作する際にに便利な関数です。
文字列を後ろから検索したい場合に欠かせない関数です。
通常のInStr関数では対応しづらい後方からの検索が可能なため、文字列の最後に現れる特定の文字列を見つける場面で大いに活躍します。
InStrRev関数でできること
InStrRev関数は、Excel VBAで文字列の中から特定の文字や単語を後ろから検索し、その位置を取得するための関数です。
この関数を使用することで、文字列操作をさらに効率化し、データ検索や抽出を柔軟に行うことができます。
- 文字列内の特定の文字や単語を後方から検索可能
- 文字列の後ろから検索を開始し、最初に一致する文字列を探すことができます。
- 検索対象の文字列の位置を取得可能
- 特定の文字列が後方から見たときに、何文字目にあるかを取得します。
- 大文字と小文字の区別も設定可能
- 引数で設定することで、大文字小文字を区別して検索するかどうかを指定できます。
具体的にどんなことができるのか?
- 文字列の最後に出現する特定の文字や単語を検索できる
- (例:メールアドレスの最後の「@」の位置を取得)
- 後ろから見た検索位置を取得できる
- (例:「確認」という単語が文章のどこにあるかを特定)
- 特定のキーワードを含むデータを抽出できる
- (例:Excelのデータから「エラー」を含む行だけを見つける)
InStrRev関数は、これらの操作をわずかなコードで実現でき、初心者でも簡単に扱うことができます。
次のセクションでは、InStrRev関数の基本的な使い方を具体的なコード例とともに詳しく解説していきます。
まずは基礎からしっかり理解していきましょう!
VBAの「InStrRev関数」の基本を解説 | 後ろから文字列を検索できます
InStrRev関数は、指定した文字列を後ろから検索し、最初に一致した位置を返す関数です。
通常のInStr関数が文字列を左から右に検索するのに対し、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」とは判定されません。
- 例えば、「VB」や「BA」を後ろから検索する場合、それぞれの文字列が見つかる位置を返します。
- この例では、「VBA」という完全一致する文字列を検索します。
- 「compare」引数の違い
- 大文字小文字を区別する場合(デフォルト)
- InStrRev関数の 「compare」引数を省略する、または
vbBinaryCompare
を指定すると、大文字小文字を区別します。- 例:「VBA」を検索 → 見つかる(24文字目)。
- 例:「vba」を検索 → 見つからない。
- InStrRev関数の 「compare」引数を省略する、または
- 大文字小文字を区別しない場合
vbTextCompare
を指定すると、大文字小文字を区別せずに検索を行います。- 例:「vba」や「VBA」どちらでも見つかる(24文字目)。
- 大文字小文字を区別する場合(デフォルト)
InStr関数とInStrRev関数の簡単な比較
InStrRev関数には、似た機能を持つInStr関数という関数があります。
この関数は、文字列を検索する方向がInStrRev関数とは異なります。
以下の表で違いを簡単に比較してみましょう。
関数名 | 検索方向 | 主な用途 |
---|---|---|
InStr | 左から右 | 最初に一致する文字列の位置を取得したい場合 |
InStrRev | 右から左 | 最後に一致する文字列の位置を取得したい場合 |
InStrRev関数が後ろから順に検索して最初の一致箇所を見つけるのに対し、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」の場合の処理を必ず記述する。
- 検索結果を条件分岐でチェックしておくと、エラーを防ぐことができます。
注意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演算子を使うと、「.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講座がおすすめです。
動画での丁寧な解説や、実践的な学習スタイルで、初心者でも無理なく基礎から応用まで習得できます。
自己学習を進める上で、何度でも繰り返し見返せる講座は非常に心強い味方になりますよ!


\ 自分のペースで学べる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
処理結果


コードの動作概要
検索対象のメールアドレスを emailList
配列に格納します。
この配列には複数のメールアドレスが含まれます。
各メールアドレスに対して InStrRev
関数を使用し、「@」の位置を後方から検索します。
Left
関数を使用して、「@」より前の部分(ユーザー名部分)を抽出します。
抽出したユーザー名部分をデバッグウィンドウに出力します。
「@」が見つからない場合は、有効なメールアドレスではない旨をデバッグウィンドウに表示します。
このコードで使用している機能
機能名 | 説明 |
---|---|
Array | 配列を作成して複数のメールアドレスを格納します。 |
InStrRev | 「@」の位置を後方から検索し、ユーザー名部分とドメイン部分を区切ります。 |
Left | 指定した位置までの文字列を取得します(ユーザー名部分の抽出に使用)。 |
For Next | 配列内のすべてのメールアドレスを順番に処理します。 |
Debug.Print | 抽出結果をデバッグウィンドウに出力します。 |
1行ずつコードを解説
「クリック」してコードの詳細解説を見る
- Sub ExtractUsername()
- サブルーチン「ExtractUsername」を定義します。
このサブルーチンでは、メールアドレスからユーザー名部分を抽出します。
- サブルーチン「ExtractUsername」を定義します。
- Dim emailList As Variant
- メールアドレスを格納する配列「emailList」を宣言します。
- Dim username As String
- ユーザー名部分を一時的に格納するための文字列変数「username」を宣言します。
- Dim position As Long
- 「@」の位置を格納するための変数「position」を宣言します。
- Dim i As Long
- 配列を処理するためのループ用カウンタ変数「i」を宣言します。
- emailList = Array(“tanaka@gmail.com”, “yamada@yahoo.co.jp”, “sato@gmail.com”, “nakamura@hotmail.com”)
- 配列「emailList」に複数のメールアドレスを格納します。
- For i = LBound(emailList) To UBound(emailList)
- 配列の最初の要素(LBound(emailList))から最後の要素(UBound(emailList))までループを開始します。
- position = InStrRev(emailList(i), “@”)
- 現在のメールアドレス(emailList(i))内で「@」を後方から検索し、その位置を変数「position」に格納します。
- If position > 0 Then
- 「@」が見つかった場合の条件分岐を開始します。
- username = Left(emailList(i), position – 1)
- Left関数を使用して、「@」の直前までの文字列(ユーザー名部分)を変数「username」に格納します。
- Debug.Print username
- 抽出したユーザー名をデバッグウィンドウに表示します。
- Else
- 条件分岐の「@」が見つからなかった場合の処理を開始します。
- Debug.Print “『” & emailList(i) & “』は有効なメールアドレスではありません。”
- 「@」が見つからなかった場合、有効なメールアドレスではない旨をデバッグウィンドウに表示します。
- End If
- 条件分岐を終了します。
- Next i
- 次の配列要素を処理するためにループを続行します。
- End Sub
- サブルーチンを終了します。
総括・ポイント
このコードは、メールアドレスの文字列からドメイン部分を除外し、ユーザー名部分のみを抽出する応用例です。
メールアドレス処理やデータ解析において、特定の部分を取り出す操作に役立ちます。
- 実務での活用例
- ユーザー名リストの生成や、メールアカウントの整理などに応用可能。
- 初心者向け学習
- 配列操作、
InStrRev
関数、Left
関数の学習に最適。
- 配列操作、
この記事のまとめ
この記事では、VBAの「InStrRev関数」を使用して、文字列を後ろから検索する方法やその実用的な使い方を解説しました。
InStrRev関数を活用することで、文字列内の最後に現れる特定の文字列を簡単に検索でき、データ操作や抽出が効率的に行えるようになります。
これにより、Excel業務をさらに効率化し、手作業によるミスを減らすことが可能です。
ポイントのおさらい
- InStrRev関数とは?
- InStrRev関数は、指定した文字列を後ろから検索し、最初に一致する文字列の位置を返す便利な関数です。
- できること
- 文字列の後ろから検索を開始し、特定の文字列を見つける
- 後ろから見た検索位置を取得する
- 大文字と小文字を区別するかどうかを設定可能
⇒ 「VBAの「InStrRev関数」でできること|文字列検索の基本と応用」をもう一度見る
⇒ 「VBAの「InStrRev関数」の基本を解説 | 後ろから文字列を検索できます」をもう一度見る
- できること
- InStrRev関数は、指定した文字列を後ろから検索し、最初に一致する文字列の位置を返す便利な関数です。
- InStrRev関数の使用例
- InStrRev関数を使った以下の実用的なコード例を紹介しました。
- メールアドレスからドメイン以外を抜き出す
- 配列に格納された複数のメールアドレスから、ドメイン部分を除外してユーザー名部分を取得します。
⇒ 「使用例1: メールアドレスからドメイン以外を抜き出す」をもう一度見る
- 配列に格納された複数のメールアドレスから、ドメイン部分を除外してユーザー名部分を取得します。
- メールアドレスからドメイン以外を抜き出す
- InStrRev関数を使った以下の実用的なコード例を紹介しました。
- InStrRev関数を使う際の注意ポイント
- InStrRev関数を正しく使うために、以下の点に注意しましょう。
- 注意1: 見つからなかった場合は「0」を返す
- 注意2: デフォルトでは大文字と小文字を区別する
- 注意3: 検索の開始位置を意識する
⇒ 「VBA「InStrRev関数」を使う際の注意ポイント3選」もう一度見る。
- InStrRev関数を正しく使うために、以下の点に注意しましょう。
さらに学ぶために
この記事でVBAのInStrRev関数を学んだら、次は関連する便利なVBA機能を学んでみましょう。
InStrRev関数を使いこなすことで得られる知識を、以下の機能や方法と組み合わせると、Excel作業をさらに効率化できます。

