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

2020年6月12日

FIND関数を右(最後)から検索する方法を紹介しましたが

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

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

少ない手間と簡潔な記述で実現可能なため、数式を組み合わせるより推奨します。

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

サンプルファイル

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

サンプルファイルの中に保存されているユーザ定義関数FindReverseを利用します。

=FindReverse(検索文字列,対象,開始位置)
引数省略時の値説明
検索文字列省略不可検索する文字列を指定
対象省略不可検索対象となる文字列かセルを指定
開始位置1検索を開始する位置を数値かセルで指定。
最も左を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の学習・活用方法の記事一覧

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