Excel関数でパスからファイル名を取得する方法をお探しですね。
広告
Excelでフルパスからファイル名だけ、フォルダだけを取り出す方法
Excelでファイル一覧や資料管理表を作っていると、「C:\Users\…\Documents\sample.xlsx」みたいなフルパスから、ファイル名だけ、またはフォルダ名だけを取り出したいときってありますよね。
手入力で分けることもできますが、ファイル名を変えたり保存場所を移動したりするたびに修正するのは面倒だし、入力ミスも起きやすくなります。
この記事では、Excelの関数だけでフルパスから「ファイル名のみ」や「フォルダパス」を取り出す方法を、今開いているファイルの場合と、セルに入力済みのパスの場合に分けて説明していきます。
まずは基本:フルパスの仕組みを理解しよう
Excelでフルパスから必要な部分を取り出すには、まずパスの構造を知っておくと便利です。
Windowsのフルパスは「C:\Users\user\Documents\売上一覧.xlsx」みたいに、フォルダを「\」で区切って、最後にファイル名が来る形になっています。
つまり、**ファイル名だけ取り出したいなら「最後の\より右側」**、**フォルダパスを取り出したいなら「最後の\より左側」**を取ればいいわけです。
この考え方がわかると、あとで出てくる関数の組み合わせも理解しやすくなりますよ。
今開いているExcelファイル自身の情報を取得したいときは、**CELL関数**を使うのが定番です。
CELL(“filename”,A1)と入力すると、保存済みのファイルなら「フォルダパス[ブック名]シート名」という形式で返してくれます。
たとえば「C:\Work\[集計表.xlsx]Sheet1」みたいな感じです。
「[」より前がフォルダパス、「[」と「]」の間がファイル名、「]」より後がシート名だとわかりますね。
つまり、**セルに入力されたパス**なのか、**今開いているファイルの情報**なのかで、使う関数を分けるのがポイントです。
ちなみに、Excelのバージョンによって使える関数が違うので注意が必要です。
Microsoft 365やExcel 2021以降なら、**TEXTAFTERやTEXTBEFORE**という便利な関数が使えて、最後の区切り文字を基準にした抽出がすごく簡単になります。
古いExcelではこれらが使えないので、SUBSTITUTE関数で最後の区切り文字だけを別の文字に置き換えてから、FIND関数で位置を調べる方法を使います。
この記事では、コピーして使いやすいように、用途別にそのまま使える数式を紹介していきますね。
今開いているExcelファイルから情報を取り出す方法
今作業しているExcelファイル自身のフルパスを取得するには、**CELL関数**を使います。
どこかのセルに次の式を入力すると、保存済みのファイルなら、フォルダパス、ファイル名、シート名を含んだ文字列が返ってきます。
“`excel
=CELL(“filename”,A1)
“`
結果はたとえば「C:\Users\user\Documents\[売上一覧.xlsx]Sheet1」みたいな形になります。
ファイル名だけを取り出す
ファイル名だけを取り出したいときは、「[」の次の文字から「]」の手前までをMID関数で切り出します。
FIND関数で「[」と「]」の位置を調べて、その差分から文字数を計算する仕組みです。
“`excel
=MID(CELL(“filename”,A1),FIND(“[“,CELL(“filename”,A1))+1,FIND(“]”,CELL(“filename”,A1))-FIND(“[“,CELL(“filename”,A1))-1)
“`
この式で、「売上一覧.xlsx」みたいなファイル名だけが取り出せます。
フォルダパスだけを取り出す
フォルダパスだけを取り出したいときは、「[」より前をLEFT関数で取り出します。
CELL関数の結果では、フォルダパスの直後に「[ファイル名]」が続くので、「[」の位置より1文字前までを取得すれば、末尾に「\」が付いたフォルダパスになります。
“`excel
=LEFT(CELL(“filename”,A1),FIND(“[“,CELL(“filename”,A1))-1)
“`
結果は「C:\Users\user\Documents\」みたいに、末尾に「\」が付いた形になります。
末尾の「\」を付けずに「C:\Users\user\Documents」みたいな形にしたいときは、切り出す文字数をもう1文字短くします。
“`excel
=LEFT(CELL(“filename”,A1),FIND(“[“,CELL(“filename”,A1))-2)
“`
フォルダパスを他のファイル名と結合するときは末尾の「\」があったほうが便利ですが、表示用なら末尾なしのほうが見た目がすっきりします。
用途に応じて使い分けてくださいね。
注意点
ただし、**CELL(“filename”)は一度も保存していないファイルでは正しく動きません**。
未保存の新規ファイルでは空白になったり、エラーになったりします。
数式を作っても結果が表示されない場合は、まずファイルを保存してから再計算してみてください。
また、ファイル名や保存場所を変えた直後に表示が更新されないときは、計算方法が手動になっている可能性があります。
そのときは、Excelの「数式」タブから計算方法を確認して、必要なら再計算を実行しましょう。
セルに入力済みのフルパスから取り出す方法
すでにA2セルに「C:\Users\user\Documents\売上一覧.xlsx」みたいなフルパスが入っている場合は、CELL関数じゃなくて文字列関数で取り出します。
Microsoft 365や新しいExcelの場合
Microsoft 365や新しいExcelで**TEXTAFTER関数**が使えるなら、ファイル名の取得はすごく簡単です。
TEXTAFTERは指定した区切り文字より後ろの文字列を返す関数で、第3引数に「-1」を指定すると最後の区切り文字を基準にできます。
“`excel
=TEXTAFTER(A2,”\”,-1)
“`
この式で、A2の中にある最後の「\」より右側、つまり「売上一覧.xlsx」だけが返ってきます。
逆に、フォルダパスを取得したいときは**TEXTBEFORE関数**を使います。
TEXTBEFOREは指定した区切り文字より前の文字列を返す関数です。
“`excel
=TEXTBEFORE(A2,”\”,-1)
“`
末尾の「\」を含めたフォルダパスにしたいときは、取得した文字列に「\」を連結します。
“`excel
=TEXTBEFORE(A2,”\”,-1)&”\”
“`
古いExcelの場合
古いExcelでTEXTAFTERやTEXTBEFOREが使えないときは、**SUBSTITUTE関数、LEN関数、FIND関数**を組み合わせます。
考え方は「最後の\だけを目印の文字に置き換えて、その位置を基準に切り出す」です。
ファイル名だけを取得する場合は、最後の「\」の位置を求めて、そこから右側をRIGHT関数で取得します。
次の式では、通常のパスに含まれにくいCHAR(1)という文字を一時的な目印として使っています。
“`excel
=RIGHT(A2,LEN(A2)-FIND(CHAR(1),SUBSTITUTE(A2,”\”,CHAR(1),LEN(A2)-LEN(SUBSTITUTE(A2,”\”,””)))))
“`
フォルダパスを取得する場合は、同じ目印文字の位置より左側をLEFT関数で切り出します。
次の式は末尾の「\」を含めないフォルダパスを返します。
“`excel
=LEFT(A2,FIND(CHAR(1),SUBSTITUTE(A2,”\”,CHAR(1),LEN(A2)-LEN(SUBSTITUTE(A2,”\”,””))))-1)
“`
区切り文字が混ざっている場合
実際の仕事では、Windowsパスの「\」だけじゃなく、WebのURLやOneDriveのパスで「/」が混ざることもあります。
そんなときは、先にSUBSTITUTE関数で「/」を「\」に統一してから取り出すと安定します。
Microsoft 365なら**LET関数**を使って正規化した文字列に名前を付けると、式が読みやすくなります。
たとえば、A2に入ったパスの区切り文字をそろえてからファイル名を取り出すなら、こんな感じです。
“`excel
=LET(p,SUBSTITUTE(A2,”/”,”\”),TEXTAFTER(p,”\”,-1))
“`
拡張子を除いたファイル名だけを取り出す
ファイル名から拡張子を除いた名前だけを取り出したいときは、取得したファイル名に対して、最後の「.」より前を取得します。
ただし「売上.2025.xlsx」みたいにファイル名の途中にドットが入ることもあるので、最初のドットじゃなくて**最後のドット**を基準にするのが安全です。
Microsoft 365ならこう書くと、「売上一覧.xlsx」から「売上一覧」を取得できます。
“`excel
=TEXTBEFORE(TEXTAFTER(A2,”\”,-1),”.”,-1)
“`
うまくいかないときのチェックポイントと実務のコツ
数式を入力してもファイル名やフォルダパスがうまく取得できないときは、まず次の3つを確認してみてください。
1. **対象が保存済みか**:CELL(“filename”)は保存済みのファイル情報を返す関数なので、未保存の新規ファイルでは期待どおりに動きません。
2. **区切り文字が想定どおりか**:セルに入力されたパスが「C:\…」じゃなくて「https://…」や「/Users/…」みたいな形式だと、「\」を区切り文字にした式では正しく分割できません。
3. **参照セルが正しいか**:CELL関数の第2引数が別のファイルや別のシートを参照していると、今見ているファイルとは違う情報が返ることがあります。
パス文字列の末尾に「\」が付いている場合も注意が必要です。
たとえば「C:\Users\user\Documents\」みたいにフォルダそのものを表す文字列では、最後の「\」より右側が空になるので、TEXTAFTERでファイル名を取り出そうとしても空白になってしまいます。
エラー対策を入れておくと便利
実際の管理表に組み込むなら、**エラー対策**も入れておくと使いやすくなります。
たとえば、A2が空白のときや「\」を含まない文字列が入っているときにエラーを表示したくない場合は、**IFERROR関数**で囲みます。
Microsoft 365でファイル名だけを取得する式なら、こうしておくと、取り出せない場合は空白を返せます。
“`excel
=IFERROR(TEXTAFTER(A2,”\”,-1),””)
“`
管理表では、エラー値が残っているとフィルターや集計の邪魔になることがあります。
なので、一覧表として使う場合は、取り出せないときは空白にするか、「パス形式を確認」みたいなメッセージにするか決めておくといいですよ。
確認用の列ならメッセージを返すほうが原因がわかりやすいし、最終出力用の列なら空白のほうが見た目がすっきりします。
数式を読みやすくするコツ
数式を長くしすぎると、あとからメンテナンスしにくくなります。
Microsoft 365を使っているなら**LET関数**で「パス」「ファイル名」みたいな中間結果に名前を付けると、式の意味がわかりやすくなります。
たとえば、区切り文字を統一して、ファイル名を取り出して、エラー時は空白にする式はこんな感じで書けます。
“`excel
=IFERROR(LET(p,SUBSTITUTE(A2,”/”,”\”),TEXTAFTER(p,”\”,-1)),””)
“`
まとめ
Excelでフルパスから「ファイル名だけ」または「フォルダパスだけ」を取り出す方法は、対象によって使い分けるのがポイントです。
– **今開いているファイルの情報**を取得するなら→**CELL(“filename”)**を使う
– **セルに入力済みのパス文字列**を分解するなら→**TEXTAFTERやTEXTBEFORE**、または**LEFT、RIGHT、FIND、SUBSTITUTE**を組み合わせる
新しいExcelなら短い式で直感的に処理できるし、古いExcelでも最後の区切り文字の位置を求めれば同じ結果が得られます。
ファイル管理表や資料一覧を作るときは、保存済みかどうか、区切り文字が統一されているか、末尾の「\」を含めるかどうかを確認しながら、用途に合った方法を選んでくださいね。
この記事が、Excelでのファイル管理をもっと楽にするヒントになればうれしいです!
広告
