office.notes@misora05

本館ブログのうち,Office・Windwsがらみのネタ+@を抜き出したもの.月水金更新予定.

後方からのFIND関数@Excel

「目的の文字が,文字列後方から探した場合,何文字目にあるか」

VBAでいうとInStrRev関数にあたる関数,Excel的に言えば後方からのFIND関数ですが,未だに実装されていないんですよね.
少々意外ではあるのですが‥.

Microsoft Store (マイクロソフトストア)

Excel関数のみで,後方からのFIND関数を実装する.

今回は,「電話番号の区切りの最後の"-"の位置を探す」ことにします.

まずは結論から――こうなります.

f:id:misora05:20190228183826p:plain

話としては,前回の「フルパスからファイル名・フォルダ名を得る」と非常によく似ているため,その流用で行きますw

  1. 探すべき文字が,文字列全体で見た場合,そのいくつめに当たるのかを調べる.

    「電話番号の区切りの"-"がいくつあり,最後のそれはそのいくつめか」をまず調べます.

    =LEN(A1)-LEN(SUBSTITUTE(A1,"-",""))

    例では2番目の"-"が最後の区切り文字"-"であると判定されました.

  2. それを適当な文字列に置換する.

    「適当な文字列」と言っても,本当に適当ではだめですw
    今回の作業において絶対に出現しないと思われる文字列にしないとダメです.

    今回は"-"を"?"に置換しましたが,"†"とかはなかなか丁度いいんじゃないでしょうかw

    =SUBSTITUTE(A1,"-","?",C1)

    例では2番目の"-"を"?"に置換し,"03-3581?5111"という文字列を得ました.

  3. その置換された文字列が前方から何文字目にあるのかを調べる.

    これは簡単ですね.普通にFIND関数を使いましょう.

    =FIND("?",C2)

    例では,"03-3581?5111"の中で"?"という文字列,すなわち最後の"-"だった文字列は,前方から8文字目にあると判定されました.

まとめ

上記を1つの関数にまとめてみましょう.
なお,ここではA1セルに対象の文字列が書かれているものとします.

=FIND("?",SUBSTITUTE(A1,"-","?",LEN(A1)-LEN(SUBSTITUTE(A1,"-",""))))

結論として

👩「InStrRevを早くExcelにも実装してください!」

これに尽きますねw