
フルパスからファイル名を取り出す方法:TEXTAFTERがない環境でもOK
こんにちは。スーパーソフトウエア東京オフィス 技術部の加藤です。ソフトウェア開発の現場では、ログファイルや出力データを扱う際に、「フルパスからファイル名だけを取り出したい」という場面がよくあります。例えば、次のようなパスが並んでいたとします。

欲しいのは、この中の idal9hz5g.log や mkgjapjb.log といった「ファイル名だけ」です。
1. Pythonで取り出す方法
Pythonにはファイルパス操作用の便利なモジュールが用意されています。例えば、Excelファイル(.xlsx)に記録されたパスからファイル名だけを抽出する場合は次のように書けます。
import os
import openpyxl
# Excelファイルを開く
wb = openpyxl.load_workbook("input.xlsx")
ws = wb.active # 最初のシートを対象
# A1~A5 のセルを順に処理
for row in range(1, 6): # 1~5 行目
path = ws[f"A{row}"].value
if path: # None でない場合
# ファイル名だけ抽出
filename = os.path.basename(path)
# B列に書き込み
ws[f"B{row}"] = filename
# 保存(上書き保存)
wb.save("input.xlsx")ポイント: os.path.basename でフルパスからファイル名だけを簡単に取得できます。
from pathlib import Path
import openpyxl
# Excelファイルを開く
wb = openpyxl.load_workbook("input.xlsx")
ws = wb.active # 最初のシートを対象
# A列のセルを順に処理(最終行まで)
for row in range(1, ws.max_row + 1):
path_str = ws[f"A{row}"].value
if path_str:
# Pathオブジェクトを作成してファイル名だけ取得
filename = Path(path_str).name
ws[f"B{row}"] = filename # B列に書き込み
# 保存
wb.save("input.xlsx")pathlibを使うと、Python でフルパスからファイル名だけを取得する方法がさらに直感的になります。os.path.basename よりモダンで読みやすい書き方です。
結果

2. Excelで取り出す方法
Excelでも、関数やVBAを使って同じことができます。
(a) VBAの場合
Sub ExtractFileNames()
Dim i As Long
Dim lastRow As Long
Dim fullPath As String
' A列の最終行を取得
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
' A1~最終行まで処理
For i = 1 To lastRow
fullPath = Cells(i, 1).Value
If fullPath <> "" Then
' ファイル名だけ抽出してB列に出力
Cells(i, 2).Value = Mid(fullPath, InStrRev(fullPath, "\") + 1)
End If
Next i
End Sub
ただし、使える関数はバージョンによって異なります。(b) Excel関数の場合
Excel 365 / 2021 以降
新しい関数 TEXTAFTER を使えば一発です。
=TEXTAFTER(A1, "\", -1)Excel 2019 以前
TEXTAFTER が使えない場合は、SUBSTITUTE と FIND、RIGHT を組み合わせます。
=RIGHT(A1, LEN(A1) - FIND("~", SUBSTITUTE(A1, "\", "~", LEN(A1)-LEN(SUBSTITUTE(A1, "\", "")))))ぱっと見た限り、直観的に理解できないので、Excel 2019以前でファイル名を抽出する関数の詳細ステップを解説します。
ステップ1:パス内の「\」の個数を数える
LEN(A1) - LEN(SUBSTITUTE(A1, "\", ""))
SUBSTITUTE(A1, "\", "")
→ 文字列から「\」をすべて削除します。LEN(A1) と LEN(削除後) の差
→ 元の文字列に含まれる「\」の個数が分かります。
例: このパスでは「\」が 6 個なので、結果は 6です。
ステップ2:最後の「\」だけを置き換える
SUBSTITUTE(A1, "\", "~", LEN(A1)-LEN(SUBSTITUTE(A1, "\", "")))
SUBSTITUTE の第4引数に「置換対象の出現番号」を指定できます。
ここでは「最後の \」だけを ~ に置き換えます。
「~」自体に特別な意味があるわけではありません。 ポイントは『パスに含まれない文字を一時的に置き換えに使う』 ことです。結果の文字列は次の通りです。
C:\Users\katoy\test1\test2\qfkyzop5~idal9hz5g.log
ステップ3:最後の「\」の位置を取得
FIND("~", SUBSTITUTE(...))先ほど「最後の \」を置き換えた「~」の位置を調べます。
文字列の何文字目かが分かります。
この例では位置は 35(例)となります。
ステップ4:右側の文字列を取り出す
RIGHT(A1, LEN(A1) - FIND("~", ...))全体の長さから「~」までの文字列の長さを引きます。
右からその文字数だけ切り出します。
これでファイル名だけを取得可能できます。
結果:
idal9hz5g.logまとめ
Python → os.path.basename または pathlib.Path.name で簡単に取得可能
Excel 365/2021 → TEXTAFTER / TEXTBEFORE を使用
Excel 2019以前 → SUBSTITUTE + FIND + RIGHT の組み合わせで対応
新しい関数を使える環境ではとても簡単ですが、古い環境では工夫して処理する必要があります。こうした「Excel職人技」も現場ではよく使われています。
▼採用情報
▼新卒情報はWantedlyで