VBAでしかファイル名のみ、パスのみは取得できないのか?!と嘆いていた同胞に捧げます。
unix ver.
(1) ファイル名のみ
=RIGHT(A1, LEN(A1)-FIND(">",SUBSTITUTE(A1,"/",">",LEN(A1)-LEN(SUBSTITUTE(A1,"/","")))))
(2) パスのみ
=LEFT(A1,FIND(">",SUBSTITUTE(A1,"/",">",LEN(A1)-LEN(SUBSTITUTE(A1,"/",""))),1)-1)
win ver.
(1) ファイル名のみ
=RIGHT(A1, LEN(A1)-FIND(">",SUBSTITUTE(A1,"\",">",LEN(A1)-LEN(SUBSTITUTE(A1,"\","")))))
(2) パスのみ
=LEFT(A1,FIND(">",SUBSTITUTE(A1,"\",">",LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))),1)-1)
こめんと
- 数式の中にある「>」は、中間的に利用しています。パス中に出てこない文字列であればなんでもOKです。
- 一部の探しもとめていた人に喜ばれるTipsです。
参考
- 式の仕組みについては以下URLに記載しています
- http://www.works4life.jp/excel-getting-filename-from-full-path/
変更履歴
2017/10/10
- 中間的に利用している文字を「★」から「>」に変更しました。
- 元記事追加
2016/01/05
(2)のファイル名のみ取得の関数を更新しました。短くなりました。以前の関数は以下のような感じ。
=MID(A1,FIND(">",SUBSTITUTE(A1,"/",">",LEN(A1)-LEN(SUBSTITUTE(A1,"/",""))),1)+1,LEN(A1)-FIND(">",SUBSTITUTE(A1,"/",">",LEN(A1)-LEN(SUBSTITUTE(A1,"/",""))),1))
一番最初のMID関数を実施するのに、(2)のパスのみの文字列の長さを取っていましたが、以下のようなことをしています。
- A1からパスのみの文字列をSUBSTITUTEで空白に変換する
- MID関数で1文字目以降の文字列を取得する