セル値を使いブック名として保存。統一フォームに有用

vbabooksaveceyecatch

エクセルVBAでセル値を利用してブック名として保存します。
保存にはSaveAsメソッドですが、コードの中心はGetSaveAsFilenameダイアログを使うことです。


こんにちは、じゅんぱ店長(@junpa33)です。

エクセルブックの「名前を付けて保存」について、指定したセルの値をブック名として保存する方法を紹介します。

エクセルのテンプレートブックで、データを新しく記入し資料作成後に保存するようなイメージパターンです。

所定セル位置のデータをそのままブック名として利用出来る場合に有効です。

セル値をブック名にして保存する

vbabooksavecp005

キモの部分は名前を付けて保存のダイアログを利用することです。

あとマクロ(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
vbabooksavecp000
セル値を指定する

名前を付けて保存ダイアログ表示

次に、名前を付けてダイアログを表示して、保存するなら「保存ボタン」クリックでそのセル名で保存します。キャンセルで中止します。

最初にどこのフォルダを表示するかは、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
vbabooksavecp001
名前を付けて保存ダイアログ

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

vbabooksavecp002

ブック名として保存できないセル値

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

例えば年月日で保存する場合は注意してください。

vbabooksavecp003
矢印下001
vbabooksavecp004

セル値で保存のマクロ(VBAコード)保存場所

このマクロの保存場所は、マクロ付きエクセルブックであればどこでも大丈夫です。

ただしこのマクロを利用する時には、その保存したブックを ” いちいち ” 開いておく必要があります。

なので、個人用マクロブックに保存しておくことをオススメします。

個人用マクロブックについてはこちら・・・

導入先ブックの注意点

個人用マクロブックに導入した場合は、相対パス指定の「ThisWorkbook」の指しているものが個人用マクロブックになります。なので、ダイアログが最初に表示するフォルダが、とんでもない先に行ってしまいます。

C:\Users\(ユーザー名)\AppData\Roaming\Microsoft\Excel\XLSTART

ChDirでは「ThisWorkbook」ではなく、ドキュメントなど使い易い先に変更してください。

まとめ

vbabooksavecp006

名前を付けて保存を行う場合で、統一性の有る保存名にしたい時には有効な方法になります。

特にテンプレートを使用した確定したフォームの場合は、同一項目のセルを指定していけば、簡単に実現できてきます。

さらに、セル値が同名であってもNow関数を使って末尾に作成日時を付加すれば同名重複も発生しにくくなります。

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2 エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

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

エクセルVBA最速理解で必要な知識を集めよう!

エクセルVBA業務ツールで日常の業務改善を行いましょう。

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。