Excelマクロ・VBA FIND関数で右(後ろ)からN文字目を取得する方法

2019年12月3日

FIND関数を右(最後)から

検索する方法を紹介しましたが

長く難解な数式となってしまいます。

もしマクロ・VBAを使用してよい環境であれば

少ない手間と簡潔な記述で実現可能なため

数式を組み合わせるより推奨します。

この記事ではその方法を紹介します。

サンプルファイル

※セキュリティの警告が出る場合は有効化してください。(解除方法↓)

サンプルファイルの中に保存されている

ユーザ定義関数FindReverseを利用します。

FindReverse(検索文字列,対象,開始位置)

<検索文字列>
検索する文字列かセルを指定します。
<対象>
検索対象となる文字列かセルを指定します。
<開始位置>
検索を開始する位置を数値かセルで指定します。
先頭(最も左)は1です。開始位置は省略可能です。

FIND関数と同様に探す文字と

検索対象とする文字列を指定します。

マクロ・VBAで右からFIND関数による検索を行うキャプチャ

数式で工夫すると長大・複雑な

数式となってしまいますが

マクロ・VBAでは非常に簡潔です。

マクロ・VBA(ユーザ定義関数)FindReverse(検索文字列,対象,開始位置)
関数FIND(処理用文字,SUBSTITUTE(対象,検索文字列,処理用文字,LEN(対象)-LEN(SUBSTITUTE(対象,検索文字列,""))-(右からN文字目-1)))

コードサンプル

VBAのコードも非常にシンプルです。

何故なら右からFINDする関数が

用意されているためです。

(ワークシート関数にしてもいいような…)

コードは下記のとおりです。

標準モジュールを追加してペーストすれば

任意のブックで使用可能です。

Option Explicit
Function FindReverse(ByVal 検索文字列 As String, _
                     ByVal 対象 As String, _
                     Optional ByVal 開始位置 As Integer = 0)
    
    ' 開始位置が省略されている場合は対象の末端とする
    If 開始位置 = 0 Then
        開始位置 = Len(対象)
    End If
    FindReverse = InStrRev(対象, 検索文字列, 開始位置)
End Function

関連記事

マクロ・VBA 最初のプログラム

VBAの基本的な動かし方はこちらを参照

FIND関数の使い方・活用方法の記事一覧