エクセルマクロで新規ブックの作成はAddメソッドを使います。
新規ブックの扱いで、SaveAsなどを使った名付けと保存の方法についても同時に知っておくことも必要です。
こんにちは、じゅんぱ店長(@junpa33)です。
この記事のテーマは、エクセルブックをVBAマクロで、新規作成する時の始め方と保存方法についてです。
利用者それぞれ、どういう用途で新規ブックの作成するかは違います。
ブックを新規に作成する方法は一つ(VBAコードは一つ)ですが、新規保存方法については利用者の目的次第です。
そこでこの記事では、タイプ別の保存方法を5タイプ紹介しています。ブック表示画面からの保存作業とは異なって、コードで行うマクロならではの部分もあります。
- ブックの知識
- ブックの操作
- ワークブックを開くOpenメソッドの書き方 Excelマクロ
- VBA ブック名の取得法4つの解決策を詳しく解説
- VBA 開く,保存,閉じる,作成,削除 ブックの存在確認後のコード記述
- ファイルの保存に年月日+時刻を付けて管理する
- VBA 保存先フォルダをダイアログ指定で変数化
- 新規ブック5つの保存法。AddとSaveAsの使い方がわかる
- セル値を使いブック名として保存。統一フォームに有用
- VBA シートをブックから切り出し名付け保存する
- ブック名に作成者名を付加。 プロパティ変更とファイル保存
- 不要フォルダを削除する2種類のコードの作成
- 要らないファイルを自動削除するコードの作成
- ワークブックを閉じる12のパターン使い分け VBA最速理解
- ピンポイントでファイルを完全に削除するマクロ(コピペ可)
コンテンツ
新規ブック作成の方法
新規ブックの作成方法は難しくありません。
新規ブックオブジェクトの指定方法については、注意が必要です。
ブックの新規作成にはAddメソッド
ブックを新規に作成するのは、Addメソッドを使用します。基本は簡単ですのですぐにでも覚えれます。
Workbooks.Add
注意点は、Wokbook(オブジェクト)ではなくWorkbooks(コレクション)を使う部分です。
新規作成するブックにあるシート枚数はデフォルトで3枚になっています。枚数を変更したい場合は、別にVBAコード作成が必要ですが、別にデフォルト枚数を変更するには「エクセルファイルタブのオプション」から「ブックのシート数」を変更できます。
次のコードを実行すると、このようにエクセルが表示されます。
Sub ブックの新規作成と保存1()
Workbooks.Add
End Sub
注目点は2つです。
新規ブックに含まれているのは「シートは3枚」とデフォルト名の「Book1」になっているところです。
新規のブックには拡張子が付いていません。
新規ブックオブジェクトの指定方法
新規作成のブックを指し示すオブジェクト名として、新規ブック作成時に「ActiveWorkbook」を利用することが多いです。
つまり、新しくエクセルブックを作成したときは、そのブックが ” アクティブ状態 ” になることを利用しています。
逆に言うと、アクティブ状態から外れてしまうと、オブジェクト名としてもう「ActiveWorkbook」を使うことは出来ません。
その新規作成ブックオブジェクトを指定することは難しくなってしまいます。
なので、
新規追加してすぐに、オブジェクト変数にその新規ブックを入れておきましょう。
このサンプルで言えば、あとはいつでも「NewBook」でオブジェクトを指定することが出来ます。
Sub 新規ブックオブジェクトの指定()
Dim NewBook As Workbook
Workbooks.Add
Set NewBook = ActiveWorkbook
' 編集処理コード
End Sub
新規ブック保存のタイプ別5つの方法
新規エクセルブックの保存方法は、使用用途によって保存先も当然変わってきます。
保存方法を次の5つのタイプで解説します。
新規ファイルの名付けについては、VBAコード作成当初から決まっている場合はコードに埋め込んでおくことが出来ます。
ですが、固定名の埋め込みは、2度目以降のマクロ実行で「ファイル同名のエラー」になるので、マクロ実行毎に自動的に名前が変更されるような処理コードが必要です。
なので実務的には、「名前を付けて保存ダイアログ」を使うことで、名付けの問題を処理していきましょう。
カレントディレクトリに保存
カレントディレクトリはデフォルトでは「ドキュメント」フォルダになっています。
ファイル操作をすることで、ケースバイケースで場所が変更されます。
Sub ブックの新規作成と保存2()
Workbooks.Add
With ActiveWorkbook
.SaveAs "新規作成と保存.xlsx"
.Close
End With
End Sub
現在のカレントディレクトリを確認するにはこのコードを実行します。メッセージボックスに表示されます。
Sub カレントディレクトリ()
MsgBox CurDir
End Sub
カレントディレクトリを変更して保存するには・・・ChDirステートメントを利用する
Sub カレントディレクトリ変更()
ChDir "C:\Users\〇〇〇\Documents\新規作成と保存"
Workbooks.Add
With ActiveWorkbook
.SaveAs "新規作成と保存.xlsx"
.Close
End With
End Sub
マクロ実行ブックと同じフォルダに保存
「マクロ実行ブック」を表現するオブジェクト名がVBAでは準備されています。
「ThisWorkbook」という表現がそれにあたります。
オブジェクトなのでプロパティを付加することで色々な情報を取得することが出来ます。
なので、マクロ実行ブックのパスは、「ThisWorkbook.Path」として取得することが出来ます。
つまりこの表現を使えば、先ほどの様にカレントディレクトリを変更して、保存することも出来ますし、以下の様に記述して保存することも出来ます。
(このマクロ実行ブックはBook1.xlsm)
Sub ブックの新規作成と保存3()
Workbooks.Add
With ActiveWorkbook
.SaveAs ThisWorkbook.Path & "\" & "新規作成と保存.xlsx"
.Close
End With
End Sub
保存先フォルダを指定して保存
保存先フォルダを指定して名前を付けて保存する方法です。
名前を付けて保存のダイアログを呼び出します。保存したいフォルダを選択し、ファイル名を付けて保存します。
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コード実行で名前を付けて保存ダイアログが開きます。
「新規作成と保存.xlsx」として保存されました。
マクロを実行できるブックとして保存
先ほどと同様に名前を付けて保存ダイアログを使って、「マクロ有効ブック(xlsm)」として「新規作成と保存3」という名前のエクセルブックを作成保存します。
名前を「新規作成と保存3.xlsm」として保存実行すると実行時エラーとなります。
VBAコード(マクロ)を使ってのブック保存について、マクロ有効ブック(.xlsm)としての保存は、VBAコードに「有効ブックとして保存ための引数」を付加しなければいけません。
ブックを保存するVBAコードを作成するときには、「xlsx」と「xlsm」のどちらで保存するかの選択肢を設ける必要があります。ただし上述のVBAコードの様にブック名をコードに埋め込んだ状態では、非常に不自由なマクロにしかなりません。
その都度、エクセルブック(xlsx)かマクロ有効ブック(xlsm)を選択できないと使い易いマクロとは言えません。
保存先フォルダを指定して保存のVBAマクロ(ブックの新規作成と保存4)に対して、エクセルブック(xlsx)かマクロ有効ブック(xlsm)かの選択肢を付加することで解決します。
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
ファンクションプロシージャーで、ブック名から拡張子名を切り取って条件分岐に使用しています。
Function nomalmacro(N As String) As Variant
nomalmacro = Right(N, 4)
End Function
このVBAマクロで、利用者がその時々で自由にファイル名を付けてファイル形式も選択できるようになりました。
新規保存せずに終了
保存する必要のないブックの場合もあるでしょう。下書きやメモ書きとして利用した後、そのまま保存せずに終了パターンの場合です。
Sub ブックの新規作成と保存7()
Workbooks.Add
ActiveWorkbook.Close False
End Sub
まとめ
エクセルブックの新規作成方法はAddメソッドで簡単にコードを作成することが出来ます。
ただ、新規ブックなので名前が付いていないだけに、その新規ブックオブジェクトを指定する方法を決めておかなければいけません。
また、新規ブックを保存する場合についても、使い方に合わせた保存方法を知っておくことで、安全に編集作業を行えるようにもなります。
エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。
エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です今回の記事はここまでです。 最後までご覧いただき有難うございました。
<記事内容についての告知>
VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。
アンケートでポイ活しよう!!
アンケートに答えれば答えるほど ”使える” ポイントがたまります。