保存するファイル名に連番を付けて保存
タイトルのマクロは以下です。
'==============================
' 使用例 (テスト用マクロ)
'==============================
Sub 使用例()
Dim wb As Workbook ' 新規ワークブック用の変数
' 新しいワークブックを作成
Set wb = Workbooks.Add
' 指定したファイルパスに、重複を避けて保存
Call SaveNewWorkbookWithUniqueNameFSO("C:\TEMP\test.xlsx", wb)
End Sub
'************************************
'* 保存するファイル名がすでに存在するかどうかをチェックし、存在する場合は(2),(3)などの番号を付加して保存します
'* fileFullPath:ファイルフルパス
'* wb:保存するブック
Sub SaveNewWorkbookWithUniqueNameFSO(ByVal fileFullPath As String, ByVal wb As Workbook)
Dim savePath As String ' 最終的に保存するパス
' 既存のファイル名をチェックし、一意のファイル名を取得
savePath = SaveNewFileNameWithUniqueNameFSO(fileFullPath)
' 取得したファイル名でワークブックを保存 (Excel 形式)
wb.SaveAs fileName:=savePath, FileFormat:=xlOpenXMLWorkbook
' 保存後にワークブックを閉じる(変更を保存しない)
wb.Close SaveChanges:=False
End Sub
'************************************
'* 指定したファイル名が既に存在する場合、(2), (3) などの番号を付加して一意のファイル名を返す
'*
'* fileFullPath:ファイルのフルパス (例: "C:\TEMP\MyNewWorkbook.xlsx")
'* 返り値:一意のファイル名 (例: "C:\TEMP\MyNewWorkbook(2).xlsx")
Function SaveNewFileNameWithUniqueNameFSO(ByVal fileFullPath As String) As String
Dim fso As Object ' FileSystemObject を使用するためのオブジェクト
Dim fileName As String ' 拡張子を除いたファイル名 (例: "C:\TEMP\test")
Dim fileExtension As String ' ファイルの拡張子 (例: ".xlsx")
Dim savePath As String ' 実際に保存するファイルのフルパス
Dim counter As Integer ' 連番を付けるためのカウンター
Dim newFileName As String ' 変更後のファイル名
' FileSystemObject を作成(ファイルの存在確認などに使用)
Set fso = CreateObject("Scripting.FileSystemObject")
' ファイルの拡張子を取得(例: ".xlsx")
fileExtension = "." & fso.GetExtensionName(fileFullPath)
' フルパスから拡張子を除いた基本ファイル名を取得(例: "C:\TEMP\test")
fileName = Replace(fileFullPath, fileExtension, "")
' 初期状態では、元のファイル名のまま設定
savePath = fileName & fileExtension
' 既にファイルが存在する場合、(2), (3), ... のように連番を付与して保存名を決定
counter = 1
Do While fso.FileExists(savePath) ' ファイルが存在する限りループ
counter = counter + 1 ' 連番を増やす
newFileName = fileName & "(" & counter & ")" ' "(2)", "(3)" のように番号を追加
savePath = newFileName & fileExtension ' 新しいファイル名を設定
Loop
' 一意のファイル名を返す
SaveNewFileNameWithUniqueNameFSO = savePath
' FileSystemObject の解放(メモリ管理のため)
Set fso = Nothing
End Function
説明
1. 使用例 (使用例
マクロ)
- 新しいワークブックを作成 (
Workbooks.Add
) し、SaveNewWorkbookWithUniqueNameFSO
を呼び出して保存。 C:\TEMP\test.xlsx
というファイル名が既に存在する場合は、test(2).xlsx
などに変更される。
2. SaveNewWorkbookWithUniqueNameFSO
(ワークブックを保存)
SaveNewFileNameWithUniqueNameFSO
を呼び出して、一意のファイル名を取得。- そのファイル名でワークブックを保存 (
wb.SaveAs
)。 - 保存後にワークブックを閉じる (
wb.Close SaveChanges:=False
)。
3. SaveNewFileNameWithUniqueNameFSO
(重複しないファイル名を作成)
FileSystemObject
を使用して、指定したファイル名が存在するかチェック。- 存在する場合は
(2)
,(3)
,(4)
のように連番を追加。 - 最終的な一意のファイル名を返す。
動作例
パターン1: test.xlsx
が存在しない場合
入力 | 出力 |
---|---|
C:\TEMP\test.xlsx | C:\TEMP\test.xlsx |
パターン2: test.xlsx
が存在する場合
入力 | 既存ファイル | 出力 |
---|---|---|
C:\TEMP\test.xlsx | あり | C:\TEMP\test(2).xlsx |
パターン3: test.xlsx
と test(2).xlsx
が存在する場合
入力 | 既存ファイル | 出力 |
---|---|---|
C:\TEMP\test.xlsx | あり | C:\TEMP\test(3).xlsx |
まとめ
✅ Excel ワークブックを、重複しないように自動保存できるマクロ
✅ (2)
, (3)
, (4)
などを付与して一意のファイル名を生成
✅ ワークブック作成・保存・閉じるまでを自動化
このコードを使えば、手動でファイル名を変更する手間を省き、Excel ブックを安全に管理できます!