エクセルVBAでセル値を利用してブック名として保存します。
保存にはSaveAsメソッドですが、コードの中心はGetSaveAsFilenameダイアログを使うことです。
こんにちは、じゅんぱ店長(@junpa33)です。
エクセルブックの「名前を付けて保存」について、指定したセルの値をブック名として保存する方法を紹介します。
エクセルのテンプレートブックで、データを新しく記入し資料作成後に保存するようなイメージパターンです。
所定セル位置のデータをそのままブック名として利用出来る場合に有効です。
コンテンツ
セル値をブック名にして保存する

キモの部分は名前を付けて保存のダイアログを利用することです。
あとマクロ(VBAコード)の保存場所は何処でもですが、個人用マクロブックが使い易いでしょう。
セル値を使用する全VBAコード
セル値を使ってブック名にする全コードです。
Sub セル値をブック名にして保存()
Dim BkName As Variant
Dim CData As Variant
CData = ActiveCell.Value
If CData = "" Then
MsgBox "セルに値がありません。" & vbCrLf & _
"セル位置を再指定してください。"
Exit Sub
End If
Const FFa As String = "Excel ブック,*.xlsx,Excel マクロ有効ブック, " & _
"*.xlsm,"
Const FFb As String = "Excelバイナリブック,*.xlsb," & _
"Excel97-2003ブック,*.xls,"
Const FFc As String = "CSVカンマ区切り,*.csv,すべてのファイル,*.*"
ChDir "C:\Users\●●●\Documents\●●●\●●●\●●●" & _
"\VBAブックの名前を付けて保存\セル値で名付ける"
BkName = Application.GetSaveAsFilename(InitialFileName:=CData, _
filefilter:=FFa & FFb & FFc, FilterIndex:=1, _
Title:="名前の変更保存")
If BkName = "False" Then
Exit Sub
End If
ActiveWorkbook.SaveAs BkName
End Sub
VBAコード解説
まず最初に、保存予定のブックで、ブック名にしたいセル値の有るシートを開いて、そのセルをクリック(アクティブ)にします。セル位置はどこでもOKです。
コードがセル値を読み取り、変数CDataに代入します。セル値がない場合はメッセージで、セルの位置設定をやり直すように促します。
CData = ActiveCell.Value
If CData = "" Then
MsgBox "セルに値がありません。" & vbCrLf & _
"セル位置を再指定してください。"
Exit Sub
End If

次に、名前を付けてダイアログを表示して、保存するなら「保存ボタン」クリックでそのセル名で保存します。キャンセルで中止します。
最初にどこのフォルダを表示するかは、ChDir・・・に続く文で保存場所を指定しておくと便利です。
ファイル名にセル値を名前として表示させるには、InitialFileName:=CData と指定します。
Const FFa As String = "Excel ブック,*.xlsx,Excel マクロ有効ブック, " & _
"*.xlsm,"
Const FFb As String = "Excelバイナリブック,*.xlsb," & _
"Excel97-2003ブック,*.xls,"
Const FFc As String = "CSVカンマ区切り,*.csv,すべてのファイル,*.*"
ChDir "C:\Users\●●●\Documents\●●●\●●●\●●●" & _
"\VBAブックの名前を付けて保存\セル値で名付ける"
BkName = Application.GetSaveAsFilename(InitialFileName:=CData, _
filefilter:=FFa & FFb & FFc, FilterIndex:=1, _
Title:="名前の変更保存")
If BkName = "False" Then
Exit Sub
End If
ActiveWorkbook.SaveAs BkName

結果このように保存されました。

このやり方での保存方法に限ったことではありませんが、ファイル名として使用できない記号がいくつかありますので注意が必要です。
例えば年月日で保存する場合は注意してください。



このマクロの保存場所は、マクロ付きエクセルブックであればどこでも大丈夫です。
ただしこのマクロを利用する時には、その保存したブックを ” いちいち ” 開いておく必要があります。
なので、個人用マクロブックに保存しておくことをオススメします。
まとめ

名前を付けて保存を行う場合で、統一性の有る保存名にしたい時には有効な方法になります。
特にテンプレートを使用した確定したフォームの場合は、同一項目のセルを指定していけば、簡単に実現できてきます。
さらに、セル値が同名であってもNow関数を使って末尾に作成日時を付加すれば同名重複も発生しにくくなります。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

今回の記事はここまでです。 最後までご覧いただき有難うございました。