エクセルVBAでセル値を利用してブック名として保存します。
保存にはSaveAsメソッドですが、コードの中心はGetSaveAsFilenameダイアログを使うことです。
こんにちは、じゅんぱ店長(@junpa33)です。
エクセルブックの「名前を付けて保存」について、指定したセルの値をブック名として保存する方法を紹介します。
エクセルのテンプレートブックで、データを新しく記入し資料作成後に保存するようなイメージパターンです。
所定セル位置のデータをそのままブック名として利用出来る場合に有効です。
- ブックの知識
- ブックの操作
- ワークブックを開くOpenメソッドの書き方 Excelマクロ
- VBA ブック名の取得法4つの解決策を詳しく解説
- VBA 開く,保存,閉じる,作成,削除 ブックの存在確認後のコード記述
- ファイルの保存に年月日+時刻を付けて管理する
- VBA 保存先フォルダをダイアログ指定で変数化
- 新規ブック5つの保存法。AddとSaveAsの使い方がわかる
- セル値を使いブック名として保存。統一フォームに有用
- VBA シートをブックから切り出し名付け保存する
- ブック名に作成者名を付加。 プロパティ変更とファイル保存
- 不要フォルダを削除する2種類のコードの作成
- 要らないファイルを自動削除するコードの作成
- ワークブックを閉じる12のパターン使い分け VBA最速理解
- ピンポイントでファイルを完全に削除するマクロ(コピペ可)
コンテンツ
セル値をブック名にして保存する
キモの部分は名前を付けて保存のダイアログを利用することです。
あとマクロ(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
結果このように保存されました。
ブック名として保存できないセル値
このやり方での保存方法に限ったことではありませんが、ファイル名として使用できない記号がいくつかありますので注意が必要です。
例えば年月日で保存する場合は注意してください。
セル値で保存のマクロ(VBAコード)保存場所
このマクロの保存場所は、マクロ付きエクセルブックであればどこでも大丈夫です。
ただしこのマクロを利用する時には、その保存したブックを ” いちいち ” 開いておく必要があります。
なので、個人用マクロブックに保存しておくことをオススメします。
まとめ
名前を付けて保存を行う場合で、統一性の有る保存名にしたい時には有効な方法になります。
特にテンプレートを使用した確定したフォームの場合は、同一項目のセルを指定していけば、簡単に実現できてきます。
さらに、セル値が同名であってもNow関数を使って末尾に作成日時を付加すれば同名重複も発生しにくくなります。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。
アンケートでポイ活しよう!!
アンケートに答えれば答えるほど ”使える” ポイントがたまります。