
こんにちわ、マツコ先生 です。
「開いているエクセルファイルを別ファイルとして名前をつけて保存する方法」でお困りではないでしょうか?
本記事でそんなお悩みを解決していきますよ!
本記事を読むことで |
---|
・開いているエクセルファイルのコピーを別ファイルとして保存できる ・保存するエクセルファイルに名前を指定して保存できる |
今回、紹介する方法のメリット
- 通常の"名前をつけて保存" においては、開いているエクセルファイルの名前が変わってしまうが、この方法によれば名前は変わらない。
- 開いているエクセルファイルはそのままに、コピーを別名保存できる(定期的にバックアップを保存したい時など)
完成イメージは次のようになります。
上段は、ファイルパスを取得して表示する処理を実装します。
下段は、上段のファイルパスの場所に、設定したファイル名で保存する処理を実装します。

ファイルパスを取得して表示する処理を記述する
上段のファイルパスを取得して表示する処理については、こちらの記事を参考に実装してください。
ファイル名を指定して保存する処理を記述する
ここでは、下段のファイル名を指定して保存する処理を記述していきます。
まず、ファイルパスを取得して表示する処理を記述している次の2つは記述済みの状態だと思います。
・Button1()
・GetFilePath()
ここに、ファイル名を指定して保存する処理を行う次の2つを記述していきます。
・Button2()
・SaveFileAsName()
完成イメージは次のようになります。
次の順番で処理が記述されています。
・Button1()
・Button2()
・SaveFileAsName()
・GetFilePath()

下段のボタン用の処理 "Button2()" について
処理は後から入力するので、次のように最低限の記述だけ入力します。
入力したら、一旦、保存してください。

まず、ファイルパスとファイル名を取得する処理 "SaveFileAsName()" を追加します。
Button2()の処理の下("End Sub"の下)に次のコードをコピー&ペーストします。
Function SaveFileAsName(targetWorkbook As Workbook, withSheetName As String, range_Path As String, range_Name As String)
' Dim targetWorkbook As Workbook '保存したいブック
' Dim withSheetName As String 'range_Pathとrange_Nameのシート名
' Dim range_Path As String '保存先ファイルパスの表示先セル
' Dim range_Name As String '保存時につけたい名前(ファイル名)の表示先セル
Dim fullPath As String '保存先ファイルパスとファイル名を連結したもの
fullPath = targetWorkbook.Sheets(withSheetName).Range(range_Path) & "\" & targetWorkbook.Sheets(withSheetName).Range(range_Name)
Call targetWorkbook.SaveCopyAs(fullPath)
End Function
ここからは、ボタンに直接割り付けている処理を入力していきます。
皆さんの状況に合わせてカスタマイズする場合は、ここを変更してください。
"Button2()" の処理は、ファイルパスとファイル名を取得することです。
具体的な処理は、 "GetFilePathAndName()" 内で行われますが、条件をここで設定しています。
withSheetName: ボタンや出力先セルがあるシート名称
fileType: 選択するファイルの種類(CSVファイルの場合は、"CSVファイル" を設定します)
fileExt: 選択するファイルの拡張子(CSVファイルの場合は、"*.csv" を設定します)
range_Path: 取得したファイルパスの出力先セル
range_Name: 取得したファイル名の出力先セル
今回は、このまま "Button2()" にコピー&ペーストですね!
Sub Button2()
'ファイルを選択するとファイルパスとファイル名をセルに表示する処理を呼び出す
Dim targetWorkbook As Workbook '保存したいブック
Dim withSheetName As String 'range_Pathとrange_Nameのシート名
Dim range_Path As String '保存先ファイルパスの表示先セル
Dim range_Name As String '保存時につけたい名前(ファイル名)の表示先セル
Set targetWorkbook = ThisWorkbook
withSheetName = "sheet1"
range_Path = "C4"
range_Name = "C8"
Call SaveFileAsName(targetWorkbook, withSheetName, range_Path, range_Name)
End Sub
これで完成です!難しいところがあったら復習しましょう。
完成したVBAをテストする
それでは、テストしてみましょう!
まずは、”ファイルパス取得” を押下してください・

ファイル選択のダイアログ(ウィンドウ)が開いたら、取得したいフォルダまでフォルダを選択していき、"OK" を押下します。

ボタンの隣のセルにファイルパスが表示されたら成功です!

次は、”ファイル名を入力” してください。
このとき、拡張子は開いているファイルと同じ ".xlsm" として入力してください。

次は、”名前をつけて保存” を押下してください

指定したファイルパスの場所に、設定した名前のエクセルファイルが保存されていたら成功です!

まとめ
今回は「開いているエクセルファイルを別ファイルとして名前をつけて保存する方法」をご説明しました。
エクセルファイルを上書きしたくない状況において、メニューから手動操作せずVBA処理で保存することて、間違えて上書き保存してしまうリスクを低減できます。
次の、"開いているエクセルファイルを別ファイルとして名前をつけて保存するメリット” を再掲しますので、よく理解して今回の処理を活用していただけると幸いです。
- 通常の"名前をつけて保存" においては、開いているエクセルファイルの名前が変わってしまうが、この方法によれば名前は変わらない。
- 開いているエクセルファイルはそのままに、コピーを別名保存できる(定期的にバックアップを保存したい時など)
また、以下の記事もお困りの問題を解決するヒントになるかもしれないので、ぜひ参考にしてみてください!