新規ブック5つの保存法。AddとSaveAsの使い方がわかる

vbanewbookeyecatch

エクセルマクロで新規ブックの作成はAddメソッドを使います。
新規ブックの扱いで、SaveAsなどを使った名付けと保存の方法についても同時に知っておくことも必要です。

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

この記事のテーマは、エクセルブックをVBAマクロで、新規作成する時の始め方と保存方法についてです。

利用者それぞれ、どういう用途で新規ブックの作成するかは違います。

ブックを新規に作成する方法は一つ(VBAコードは一つ)ですが、新規保存方法については利用者の目的次第です。

そこでこの記事では、タイプ別の保存方法を5タイプ紹介しています。ブック表示画面からの保存作業とは異なって、コードで行うマクロならではの部分もあります。

新規ブック作成の方法

vbanewbookp010

新規ブックの作成方法は難しくありません。

新規ブックオブジェクトの指定方法については、注意が必要です。

ブックの新規作成にはAddメソッド

ブックを新規に作成するのは、Addメソッドを使用します。基本は簡単ですのですぐにでも覚えれます。

Addメソッドの構文

Workbooks.Add

注意点は、Wokbook(オブジェクト)ではなくWorkbooks(コレクション)を使う部分です。

新規作成するブックにあるシート枚数はデフォルトで3枚になっています。枚数を変更したい場合は、別にVBAコード作成が必要ですが、別にデフォルト枚数を変更するには「エクセルファイルタブのオプション」から「ブックのシート数」を変更できます。

vbanewbookp001

次のコードを実行すると、このようにエクセルが表示されます。

VBA
Sub ブックの新規作成と保存1()
        Workbooks.Add
End Sub
vbanewbookp002
エクセルブック新規作成

注目点は2つです。

新規ブックに含まれているのは「シートは3枚」とデフォルト名の「Book1」になっているところです。

新規のブックには拡張子が付いていません。

新規ブックオブジェクトの指定方法

新規作成のブックを指し示すオブジェクト名として、新規ブック作成時に「ActiveWorkbook」を利用することが多いです。

つまり、新しくエクセルブックを作成したときは、そのブックが ” アクティブ状態 ” になることを利用しています。

逆に言うと、アクティブ状態から外れてしまうと、オブジェクト名としてもう「ActiveWorkbook」を使うことは出来ません。

その新規作成ブックオブジェクトを指定することは難しくなってしまいます。

なので、

新規追加してすぐに、オブジェクト変数にその新規ブックを入れておきましょう。

このサンプルで言えば、あとはいつでも「NewBook」でオブジェクトを指定することが出来ます。

VBA
Sub 新規ブックオブジェクトの指定()
    Dim NewBook As Workbook
        Workbooks.Add
        Set NewBook = ActiveWorkbook
        
' 編集処理コード
        
End Sub

新規ブック保存のタイプ別5つの方法

vbanewbookp011

新規エクセルブックの保存方法は、使用用途によって保存先も当然変わってきます。

保存方法を次の5つのタイプで解説します。

新規ファイルの名付けについて

新規ファイルの名付けについては、VBAコード作成当初から決まっている場合はコードに埋め込んでおくことが出来ます。

ですが、固定名の埋め込みは、2度目以降のマクロ実行で「ファイル同名のエラー」になるので、マクロ実行毎に自動的に名前が変更されるような処理コードが必要です。

なので実務的には、「名前を付けて保存ダイアログ」を使うことで、名付けの問題を処理していきましょう。

カレントディレクトリに保存

カレントディレクトリはデフォルトでは「ドキュメント」フォルダになっています。

ファイル操作をすることで、ケースバイケースで場所が変更されます。

VBA
Sub ブックの新規作成と保存2()
        Workbooks.Add
        With ActiveWorkbook
            .SaveAs "新規作成と保存.xlsx"
            .Close
        End With
End Sub
vbanewbookp003a

現在のカレントディレクトリを確認するにはこのコードを実行します。メッセージボックスに表示されます。

VBA
Sub カレントディレクトリ()
        MsgBox CurDir
End Sub
保存先カレントディレクトリを変更する

カレントディレクトリを変更して保存するには・・・ChDirステートメントを利用する

VBA
Sub カレントディレクトリ変更()
        ChDir "C:\Users\〇〇〇\Documents\新規作成と保存"
        Workbooks.Add
        With ActiveWorkbook
            .SaveAs "新規作成と保存.xlsx"
            .Close
        End With
End Sub
vbanewbookp004

マクロ実行ブックと同じフォルダに保存

「マクロ実行ブック」を表現するオブジェクト名がVBAでは準備されています。

ThisWorkbook」という表現がそれにあたります。

オブジェクトなのでプロパティを付加することで色々な情報を取得することが出来ます。

なので、マクロ実行ブックのパスは、「ThisWorkbook.Path」として取得することが出来ます。

つまりこの表現を使えば、先ほどの様にカレントディレクトリを変更して、保存することも出来ますし、以下の様に記述して保存することも出来ます。

(このマクロ実行ブックはBook1.xlsm)

VBA
Sub ブックの新規作成と保存3()
        Workbooks.Add
        With ActiveWorkbook
            .SaveAs ThisWorkbook.Path & "\" & "新規作成と保存.xlsx"
            .Close
        End With
End Sub
vbanewbookp005

保存先フォルダを指定して保存

保存先フォルダを指定して名前を付けて保存する方法です。

名前を付けて保存のダイアログを呼び出します。保存したいフォルダを選択し、ファイル名を付けて保存します。

VBA
Sub ブックの新規作成と保存4()
    Dim BkName As Variant
    Const FFa As String = "Excel ブック,*.xlsx,Excel マクロ有効ブック,*.xlsm,"
    Const FFb As String = "Excelバイナリブック,*.xlsb,Excel97-2003ブック,*.xls,"
    Const FFc As String = "CSVカンマ区切り,*.csv,すべてのファイル,*.*"
        Workbooks.Add
        BkName = Application.GetSaveAsFilename(filefilter:=FFa & FFb & FFc, _
                            FilterIndex:=2, Title:="名前の変更保存")
        If BkName = "False" Then
            Exit Sub
        End If
        ActiveWorkbook.SaveAs BkName
End Sub

VBAコード実行で名前を付けて保存ダイアログが開きます。

vbanewbookp006

「新規作成と保存.xlsx」として保存されました。

vbanewbookp007

マクロを実行できるブックとして保存

先ほどと同様に名前を付けて保存ダイアログを使って、「マクロ有効ブック(xlsm)」として「新規作成と保存3」という名前のエクセルブックを作成保存します。

vbanewbookp008

名前を「新規作成と保存3.xlsm」として保存実行すると実行時エラーとなります。

vbanewbookp009

VBAコード(マクロ)を使ってのブック保存について、マクロ有効ブック(.xlsm)としての保存は、VBAコードに「有効ブックとして保存ための引数」を付加しなければいけません。

マクロ有効ブックとして保存するために

マクロ有効ブックとしては、このVBA記述では保存できない!

VBA
        With ActiveWorkbook
            .SaveAs "新規作成と保存.xlsm"
            .Close
        End With

マクロ有効ブックとして保存するためには、

引数 xlOpenXMLWorkbookMacroEnabled をコードに付加しなければいけない。

つまり、このように記述する必要があります。

VBA
Sub ブックの新規作成と保存5()
        Workbooks.Add
        With ActiveWorkbook
            .SaveAs "新規作成と保存.xlsm", xlOpenXMLWorkbookMacroEnabled
            .Close
        End With
End Sub

ブックを保存するVBAコードを作成するときには、「xlsx」と「xlsm」のどちらで保存するかの選択肢を設ける必要があります。ただし上述のVBAコードの様にブック名をコードに埋め込んだ状態では、非常に不自由なマクロにしかなりません。

その都度、エクセルブック(xlsx)かマクロ有効ブック(xlsm)を選択できないと使い易いマクロとは言えません。

保存先フォルダを指定して保存のVBAマクロ(ブックの新規作成と保存4)に対して、エクセルブック(xlsx)かマクロ有効ブック(xlsm)かの選択肢を付加することで解決します。

VBA
Sub ブックの新規作成と保存6()
    Dim BkName As String
    Const FFa As String = "Excel ブック,*.xlsx,Excel マクロ有効ブック,*.xlsm,"
    Const FFb As String = "Excelバイナリブック,*.xlsb,Excel97-2003ブック,*.xls,"
    Const FFc As String = "CSVカンマ区切り,*.csv,すべてのファイル,*.*"
        Workbooks.Add
        BkName = Application.GetSaveAsFilename(filefilter:=FFa & FFb & FFc, _
                            FilterIndex:=2, Title:="名前の変更保存")
        If BkName = "False" Then
            Exit Sub
        Else
            If nomalmacro(BkName) = "xlsm" Then
                ActiveWorkbook.SaveAs BkName, xlOpenXMLWorkbookMacroEnabled
            Else
                ActiveWorkbook.SaveAs BkName
            End If
        End If
End Sub

Function nomalmacro(N As String) As Variant
    nomalmacro = Right(N, 4)
End Function

ファンクションプロシージャーで、ブック名から拡張子名を切り取って条件分岐に使用しています。

VBA
Function nomalmacro(N As String) As Variant
 nomalmacro = Right(N, 4) 
End Function

このVBAマクロで、利用者がその時々で自由にファイル名を付けてファイル形式も選択できるようになりました。

新規保存せずに終了

保存する必要のないブックの場合もあるでしょう。下書きやメモ書きとして利用した後、そのまま保存せずに終了パターンの場合です。

VBA
Sub ブックの新規作成と保存7()
        Workbooks.Add
        
        ActiveWorkbook.Close False
End Sub

まとめ

vbanewbookp012

エクセルブックの新規作成方法はAddメソッドで簡単にコードを作成することが出来ます。

ただ、新規ブックなので名前が付いていないだけに、その新規ブックオブジェクトを指定する方法を決めておかなければいけません。

また、新規ブックを保存する場合についても、使い方に合わせた保存方法を知っておくことで、安全に編集作業を行えるようにもなります。

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

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

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

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

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

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

アンケートでポイ活しよう!!

アンケートに答えれば答えるほど ”使える” ポイントがたまります。

NTTコム サーチ

af_banner01

Dstyle web

dstyleweb_logo
dstyle_320x50-min