Excelマクロ・VBA FIND関数で右(後ろ)からN文字目を取得する方法
FIND関数を右(最後)から検索する方法を紹介しましたが
長く難解な数式となってしまいます。
もしマクロ・VBAを使用してよい環境であれば
少ない手間と簡潔な記述で実現可能なため、数式を組み合わせるより推奨します。
この記事ではその方法を紹介します。
サンプルファイル
※セキュリティの警告が出る場合は有効化してください。(解除方法↓)
サンプルファイルの中に保存されているユーザ定義関数FindReverseを利用します。
=FindReverse(検索文字列,対象,開始位置)
引数 | 省略時の値 | 説明 |
---|---|---|
検索文字列 | 省略不可 | 検索する文字列を指定 |
対象 | 省略不可 | 検索対象となる文字列かセルを指定 |
開始位置 | 1 | 検索を開始する位置を数値かセルで指定。 最も左を1とした連番 |
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