Excel VBAを使ったフォルダ名基盤のファイル名変更方法では、old pathから親basenameを計算してmapping表と照合し、approvedかつdestination不存在の一件をNameで変更する。parent folder名をfile名へ使う場合、root、末尾separator、同名file、禁止文字を考慮する。セルに手入力したparent名を無検証で信頼しない。この記事はfile old path、normalized parent basename、sequence、new path、approvalを一行にするを判断軸にして、記事固有のコード、合否、停止条件、復元を順序立てて説明します。
任意tagではなく、保存されている親folderのbasenameを命名sourceにする。完了は「new nameが正しい親basenameと連番規則を持ち、内容hashとfolder位置が維持される」です。結果が空なら「root直下やparent取得不能、対象0件ならrenameせず理由を記録する」として調べ、エラーを0件へ置き換えません。
parent nameの取得規則を固定
old pathから親basenameを計算してmapping表と照合し、approvedかつdestination不存在の一件をNameで変更する。親フォルダ名を基準にしたファイル改名では、単にコマンドが終了したことではなく「new nameが正しい親basenameと連番規則を持ち、内容hashとfolder位置が維持される」を完了条件にします。任意tagではなく、保存されている親folderのbasenameを命名sourceにする。
parent nameの取得規則を固定に入る前に、対象、実行場所、権限、入力の由来を確認します。root直下やparent取得不能、対象0件ならrenameせず理由を記録する。判定不能を成功へ丸めません。
old・parent・newをmapping表にする
old・parent・newをmapping表にするでは「file old path、normalized parent basename、sequence、new path、approvalを一行にする」という粒度で対象を特定します。parent folder名をfile名へ使う場合、root、末尾separator、同名file、禁止文字を考慮する。セルに手入力したparent名を無検証で信頼しない。表示名や先頭候補だけを採用しません。
親フォルダ名を基準にしたファイル改名の対象が複数なら、候補数と除外理由を残します。親フォルダ名を基準にしたファイル改名では実行ユーザー、OS・製品版、locale、カレントディレクトリも結果の解釈へ影響するため同時に記録します。
禁止文字と空parentを除外
禁止文字と空parentを除外は変更や出力生成より先に行う観測です。file old path、normalized parent basename、sequence、new path、approvalを一行にするを含む形で現状を保存し、後段のコードが同じ対象へ向くか確認します。
Option Explicit
Sub PreviewFolderBasedName()
With ThisWorkbook.Worksheets("FolderRename")
Debug.Print .Range("B2").Value2, .Range("C2").Value2, .Range("D2").Value2
End With
End Sub
parent folder名をfile名へ使う場合、root、末尾separator、同名file、禁止文字を考慮する。セルに手入力したparent名を無検証で信頼しない。親フォルダ名を基準にしたファイル改名では取得不能、対象なし、値が空という三状態を分け、stderrや終了コードを捨てません。
destination衝突を全件確認
destination衝突を全件確認ではold pathから親basenameを計算してmapping表と照合し、approvedかつdestination不存在の一件をNameで変更する。親フォルダ名を基準にしたファイル改名のサンプルにあるパス、セル、ユーザー、時刻は検証用なので、直前に確認した承認値へ置き換えます。
Option Explicit
Sub RenameOneFromFolderMap()
Dim ws As Worksheet, fso As Object, oldPath As String, parentPath As String
Dim parentName As String, expectedParent As String, newPath As String
Set ws = ThisWorkbook.Worksheets("FolderRename"): Set fso = CreateObject("Scripting.FileSystemObject")
oldPath = fso.GetAbsolutePathName(Trim$(CStr(ws.Range("B2").Value2)))
If Not fso.FileExists(oldPath) Then Err.Raise 53, , "元ファイルがありません"
parentPath = fso.GetParentFolderName(oldPath)
parentName = fso.GetFileName(parentPath)
expectedParent = Trim$(CStr(ws.Range("C2").Value2))
If Len(parentName) = 0 Or StrComp(parentName, expectedParent, vbTextCompare) <> 0 Then _
Err.Raise 5, , "C2と実際の親フォルダ名が一致しません"
newPath = fso.BuildPath(parentPath, parentName & "_" & fso.GetFileName(oldPath))
ws.Range("D2").Value2 = newPath
If fso.FileExists(newPath) Then Err.Raise 58, , "変更先があります"
If StrComp(CStr(ws.Range("E2").Value2), "Approved", vbBinaryCompare) <> 0 Then Exit Sub
Name oldPath As newPath
ws.Range("F2").Value2 = "Renamed"
End Sub
複数fileが同じnew nameを作るmappingを実行しない。folder移動とrenameを同時にしない。親フォルダ名を基準にしたファイル改名で変更が発生する場合は、新規出力、no-clobber、WhatIf、下書き表示など利用可能な安全機構を先に使います。
Approved一行だけrename
Approved一行だけrenameでは入力と出力を別々に再取得します。親フォルダ名を基準にしたファイル改名の合格は、new nameが正しい親basenameと連番規則を持ち、内容hashとfolder位置が維持されることです。件数だけでなく識別値と内容も照合します。
Sub VerifyFolderMapping()
With ThisWorkbook.Worksheets("FolderRename")
Debug.Print Dir$(.Range("B2").Value2), Dir$(.Range("D2").Value2), .Range("F2").Value2
End With
End Sub
root直下やparent取得不能、対象0件ならrenameせず理由を記録する。親フォルダ名を基準にしたファイル改名の結果が期待と違えば追加変更を重ねず、入力、対象範囲、locale・時刻、権限、製品仕様の順に戻って調べます。
同じfolder内の連番規則
複数fileが同じnew nameを作るmappingを実行しない。folder移動とrenameを同時にしない。同じfolder内の連番規則に当てはまるときは中止理由、対象識別子、終了コードまたはErr.Number、直前に成功した段階を保存します。
root直下やparent取得不能、対象0件ならrenameせず理由を記録する。親フォルダ名を基準にしたファイル改名の再試行は原因を直し、同じ入力と対象を再確認してから行います。警告抑止や強制上書きで通しません。
元mappingから復旧
parent rename後の再実行でnameが二重付加されないよう、既適用statusを判定する。親フォルダ名を基準にしたファイル改名を反復するときは、正常、差分なし、対象なし、要承認、失敗を別の状態として記録します。
| 元mappingから復旧の主キー | file old path、normalized parent basename、sequence、new path、approvalを一行にする |
| 採用条件 | new nameが正しい親basenameと連番規則を持ち、内容hashとfolder位置が維持される |
| 空結果 | root直下やparent取得不能、対象0件ならrenameせず理由を記録する |
| 中止条件 | 複数fileが同じnew nameを作るmappingを実行しない。folder移動とrenameを同時にしない |
parent nameの取得規則を固定から証跡化する禁止文字と空parentを除外
親フォルダ名を基準にしたファイル改名の証跡は「file old path、normalized parent basename、sequence、new path、approvalを一行にする」を主キーにします。parent nameの取得規則を固定で確認した値と、実行直前・実行直後の値を同じ作業番号に保存し、表示名が似ている別対象や前回の結果を混ぜません。
old・parent・newをmapping表にするで空結果を判定するdestination衝突を全件確認
親フォルダ名を基準にしたファイル改名の空結果は「root直下やparent取得不能、対象0件ならrenameせず理由を記録する」として扱います。old・parent・newをmapping表にするで入力自体が存在するか、権限で見えていないか、条件に一致しないだけかを分け、0件という表示だけで成功・失敗を決めません。
元mappingから復旧から復旧可否を測るparent nameの取得規則を固定
親フォルダ名を基準にしたファイル改名の復旧判断では「old/new mappingを逆にし、old側collisionがないことを確認して一件ずつ戻す」を採用します。元mappingから復旧を再確認し、復旧後に「new nameが正しい親basenameと連番規則を持ち、内容hashとfolder位置が維持される」へ戻ったかを別の読み取り処理で測定します。
親フォルダ名を基準にしたファイル改名の事前確認では、file old path、normalized parent basename、sequence、new path、approvalを一行にするを画面表示や標準出力だけで済ませず、実行日時と一緒に作業記録へ写します。parent folder名をfile名へ使う場合、root、末尾separator、同名file、禁止文字を考慮する。セルに手入力したparent名を無検証で信頼しないという仕様があるため、似た名前の別対象、前回実行時の値、キャッシュされた表示を今回の対象と取り違えないことが重要です。
親フォルダ名を基準にしたファイル改名のコードを実行した直後は、まず終了状態を保存し、その後に別の読み取り処理で「new nameが正しい親basenameと連番規則を持ち、内容hashとfolder位置が維持される」を確認します。親フォルダ名を基準にしたファイル改名では同じコードの表示だけを合否判定に使うと部分成功や遅延反映を見逃すため、識別値、件数、内容の三点を照合します。
親フォルダ名を基準にしたファイル改名で結果が得られない場合は、root直下やparent取得不能、対象0件ならrenameせず理由を記録する。親フォルダ名を基準にしたファイル改名ではこの状態と、権限拒否、入力形式の不一致、接続先や時刻の違いを一緒にしません。親フォルダ名を基準にしたファイル改名の対象候補数、除外された候補、最後に成功した確認処理を残すと、再試行で同じ失敗を重ねずに済みます。
親フォルダ名を基準にしたファイル改名を元へ戻す必要があるときは、old/new mappingを逆にし、old側collisionがないことを確認して一件ずつ戻す。親フォルダ名を基準にしたファイル改名の復元前にも変更後の識別値を再取得し、別担当者の更新が入っていないか確認します。親フォルダ名を基準にしたファイル改名の復元結果も通常処理と同じ完了条件で測り、戻したつもりという報告だけで閉じません。
親フォルダ名を基準にしたファイル改名を引き継ぐ記録には、parent rename後の再実行でnameが二重付加されないよう、既適用statusを判定する。特に「複数fileが同じnew nameを作るmappingを実行しない。folder移動とrenameを同時にしない」に該当した場合は、実行を止めたこと自体を正しい結果として扱います。親フォルダ名を基準にしたファイル改名の次回担当者が承認範囲と未処理対象を区別できるよう、作業番号と対象識別子を対応付けます。
親フォルダ名を基準にしたファイル改名の作業記録には、開始前の対象候補、採用した識別値、実行したコード、終了後の実測、除外理由を同じ作業番号で保存します。「file old path、normalized parent basename、sequence、new path、approvalを一行にする」を省くと別対象との比較になり得るため、日時、実行場所、製品版と一緒に残します。
Excel VBAを使ったフォルダ名基盤のファイル名変更方法を定期運用へ組み込む場合も初回は対話的に確認します。正常は「new nameが正しい親basenameと連番規則を持ち、内容hashとfolder位置が維持される」、空結果は「root直下やparent取得不能、対象0件ならrenameせず理由を記録する」、停止は「複数fileが同じnew nameを作るmappingを実行しない。folder移動とrenameを同時にしない」として報告し、次の担当者が同じ条件で追試できるようにします。
実際の親フォルダ名を変更先へ反映する
B2の絶対pathから親フォルダを取得し、その最終要素をparentNameとして新しいファイル名のprefixへ使います。C2は期待する親名との照合欄であり、D2を自由入力の変更先としては扱いません。
計算したD2を表示してから、元の存在、先の不存在、Approved完全一致を再確認します。これによりparentNameを検証するだけで変更先へ反映しない不整合をなくします。
公式情報・参考資料
親フォルダ名を基準にしたファイル改名のコマンド、API、対応範囲は次の公式一次資料で確認しました。確認日は2026年7月17日です。親フォルダ名を基準にしたファイル改名の実行環境にあるman、–help、VBA Object Browser、Get-Helpも併用してください。

コメント