Corredor

ウェブ、プログラミングの勉強メモ。

Excel 関数だけでフォルダパスとファイル名をそれぞれ抽出する

Excel 関数だけを使って、ファイルのフルパス文字列からフォルダパスとファイル名をそれぞれ抽出してみる。

以下は A1 セルに「C:\Hoge\Fuga\FooBar.txt」という文字列が記載されている場合の例である。

まずはフォルダパス部分を抽出する。

' フォルダパスを取得する:最後に登場する「\」より手前の文字列を取得する
=LEFT(A1, FIND("*", SUBSTITUTE(A1, "\", "*", LEN(A1) - LEN(SUBSTITUTE(A1, "\", ""))), 1) - 1)

' →「C:\Hoge\Fuga」が取得できる
' 関数の最後の「- 1」がなければ「C:\Hoge\Fuga\」になる

次に、フルパスからファイル名だけを抽出する。

' ファイル名を取得する:最後に登場する「\」から先の文字列を取得する
=RIGHT(A1, LEN(A1) - FIND("*", SUBSTITUTE(A1, "\", "*", LEN(A1) - LEN(SUBSTITUTE(A1, "\", "")))))

' →「FooBar.txt」が取得できる

コメントでも書いているが、この2つの関数は、指定の文字列 (= A1 セル) の最初や最後に登場する、指定の文字 (=「\」) を判別し、その前後を取得しようとしている。そのため、2つの関数の中で使っている処理は一部同じものだ。

' FIND 関数部分が同じ
           =LEFT(A1, FIND("*", SUBSTITUTE(A1, "\", "*", LEN(A1) - LEN(SUBSTITUTE(A1, "\", ""))) , 1) - 1)
=RIGHT(A1, LEN(A1) - FIND("*", SUBSTITUTE(A1, "\", "*", LEN(A1) - LEN(SUBSTITUTE(A1, "\", ""))) ))

中で何をやっているかというと、指定の文字列が最後に登場する場所を見つけるために、指定の文字列を別の文字 (ここでは「*」) に置換し、その数を数えている。あとはこの数を元に、指定の文字列の長さ (LEN()) からその数だけ位置をズラしたりしているのだ。

仕組みが分かれば、関数内にそれぞれ2回ずつ登場している「\」記号を変更することで違う使い方ができる。置換後の文字列アスタリスク「*」が指定の文字列と競合しそうであれば、こちらも変えてもらえばいい。

仕事に使えるExcel関数ブック2016/2013/2010/2007対応 (よくわかる)

仕事に使えるExcel関数ブック2016/2013/2010/2007対応 (よくわかる)

  • 作者: 富士通エフ・オー・エム株式会社(FOM出版)
  • 出版社/メーカー: 富士通エフ・オー・エム(FOM出版)
  • 発売日: 2016/11/11
  • メディア: 単行本
  • この商品を含むブログを見る