豚吐露@wiki

Excel関数だけでフルパスからファイル名を取り出す

最終更新:

ohden

- view
管理者のみ編集可

Excel関数だけでフルパスからファイル名を取り出す

Excel 2010


参考にさせていただきました。
http://works4life.jp/2008/06/excel-getting-filename-from-full-path/

MID使ってるからRIGHTとLEFT使ってdir pathとfile名を取れるように改造。
※『A1』に対象のpath、pathの区切り文字(以降デリミタ)を『/』、最後のデリミタの目印を『★』とした場合です。

  • file名を取りたい場合
=RIGHT(A1, LEN(A1) - FIND("★", SUBSTITUTE(A1, "/", "★", LEN(A1) - LEN(SUBSTITUTE(A1, "/", ""))), 1))
  • dir pathを取りたい場合
=LEFT(A1, FIND("★", SUBSTITUTE(A1, "/", "★", LEN(A1) - LEN(SUBSTITUTE(A1, "/", ""))), 1))

一応、自分なりの理解を...
①pathのデリミタを削除した時の長さを求める
②全体の長さから①を引くとデリミタの数が分かる
③SUBSTITUTEの第4引数(置換対象)に②を指定して、n番目に登場するデリミタを任意の文字(今回は★)に置換する。
 ※nは②の値
④findを使って③で置換した文字(★)の位置を調べる。
⑤RIGHTを使って③で置換した文字までを切り取る。 ※file名を取得
⑤'LEFTを使って③で置換した文字までを切り取る。 ※dir pathを取得

結局、大事なのは、最後のデリミタを見つける
=FIND("★",SUBSTITUTE(A1,"/","★",LEN(A1)-LEN(SUBSTITUTE(A1,"/",""))),1)
って事です。(*´ω`)b

ただ、これだと対象のpathがデリミタを含まなかった場合、エラーになっちゃうんだよね。(ノ∀`)
そこら辺も後々考慮に入れましょう。(`・ω・´)


デリミタ無かった場合を考慮したらくっそ長くなった...(´д`;)
やっぱifの中と外に同じもんがあるのはいただけないな。
  • file名を取りたい場合
=IF(ISERROR(RIGHT(A1, LEN(A1) - FIND("★", SUBSTITUTE(A1, "/", "★", LEN(A1) - LEN(SUBSTITUTE(A1, "/", ""))), 1))), A1, RIGHT(A1, LEN(A1) - FIND("★", SUBSTITUTE(A1, "/", "★", LEN(A1) - LEN(SUBSTITUTE(A1, "/", ""))), 1)))
  • dir pathを取りたい場合
=IF(ISERROR(LEFT(A1, FIND("★", SUBSTITUTE(A1, "/", "★", LEN(A1) - LEN(SUBSTITUTE(A1, "/", ""))), 1))), "", LEFT(A1, FIND("★", SUBSTITUTE(A1, "/", "★", LEN(A1) - LEN(SUBSTITUTE(A1, "/", ""))), 1)))
一応、デリミタ無かった場合を考慮。
file名の方はそのまま表示して、dir pathの方は空欄を表示するようにしてみた。



更新日: 2013年07月13日 (土) 18時41分48秒

名前:
コメント:

すべてのコメントを見る
記事メニュー
ウィキ募集バナー