Excel FIND・FINDB関数で右(後ろ)からN文字目の検索する方法

2019年6月13日

概要

FIND関数やFINDB関数は

指定した文字がどこにあるかを

開始位置(左・前)からの

位置で取得します。

逆に終了位置(右・後)からの

位置を取得する関数やオプション、

文字を反転させる関数もないので

複数の関数を組み合わせる必要があります。

その方法を紹介します。

FIND関数で手順を紹介しますが、

FINDB関数でも同様です。

方法

Yahoo!天気の東京都のURLの

最後の/を取得する例で考えます。

https://weather.yahoo.co.jp/weather/jp/13/?day=1

取得する数式

まず結論として下記の数式で

もっとも右の位置を検索できます。

=FIND(処理用文字,SUBSTITUTE(対象,検索文字列,処理用文字,LEN(対象)-LEN(SUBSTITUTE(対象,検索文字列,""))-(右からN文字目-1)))
右からの位置の検索結果

引数はこのように設定します。

処理用文字
対象https://weather.yahoo.co.jp/weather/jp/13/?day=1
検索文字列/

処理用文字はなんでも構いませんが、

対象中になく処理用文字とも異なる

文字である必要があります。

この結果とLEFT関数を組み合わせれば

最後の/までのURLが取得されます。

https://weather.yahoo.co.jp/weather/jp/13/

右からN文字目の数字を変えると

より左の位置で検索します。

例えば3にすると右から3番目となり

LEFT関数の結果がこうなります。

https://weather.yahoo.co.jp/weather/
右から3文字目の対象を取得

数式の詳細説明

どのような動きをしているかを

順を追って説明します。

結果さえ取れれば良いという方は

読み飛ばしてくださって構いません。

まずLEN関数で対象の文字数を取得します。

対象の文字数=LEN(対象)
LEN関数で対象全体の文字数を取得

SUBSTITUTE関数で対象から

検索文字列を全削除します。

対象から検索文字列を除外した文字列=SUBSTITUTE(対象,検索文字列,"")

今回の例ではこのような結果となります。

https:weather.yahoo.co.jpweatherjp13?day=1
SUBSTITUTE関数で対象から検索文字列を全削除

LEN関数で検索文字列を削除した

対象の文字数を取得します。

これが検索文字列の存在する数になります。

対象から検索文字列を除外した文字数=LEN(対象から検索文字列を除外した文字列)
LEN関数で検索文字列を削除した対象文字数を取得

先ほどの二つの文字数の差を算出し、

検索文字列が存在する数を求めます。

検索文字列の数=対象の文字数-対象から検索文字列を除外した文字数
N文字目の対象の数を算出

それを右からN文字目から

1を引いた数を引きます。

N文字目の対象=対象の数-(右からN文字目-1)

()は計算上不要なのですが、

見た目上、一まとまりにするために

入れているだけです。

N文字目の対象を算出

SUBSTITUTEでN文字目の対象を

処理用文字に置換します。

N文字目の検索文字列を処理用文字に置換した対象 = SUBSTITUTE(対象,検索文字列,処理用文字,N文字目の対象)
SUBSTITUTEでN文字目を検索文字列を処理用文字に置換

置換した文字列から処理用文字の

位置をFIND関数で出せば

右からN文字目の検索となります。

FIND(処理用文字,N文字目の検索文字列を処理用文字に置換した対象)
検索結果

処理用文字が対象中に別途含まれている場合、

FIND関数がそちらに反応する場合があるので

処理用文字は対象に存在しない文字である

必要があります。

関連記事

FIND関数の応用例

FIND関数に複数の検索文字列を指定する方法

使用した関数の詳細

指定の文字が何文字目にあるかを調べる (FIND関数)

指定の文字が何バイト目にあるかを調べる (FINDB関数)

文字列の長さ(文字数)を取得(LEN関数)

特定の文字列を置換(SUBSTITUTE関数)

文字列を切り出す(LEFT/MID/RIGHT関数)