新規ワークブックを作成して保存する処理について説明します。
新規ワークブックを作成して保存する方法
ワークブックを新規作成するには「Workbooks.Add」を使用します。
新規ワークブックを一旦変数にセットして、そのあとに指定したフォルダパスに名前を付けて保存します。
↓のサンプルコードでは以下の処理を行っています。
① 新規ワークブックを作成する
② 新規ワークブックを指定したパスに保存する
③ 新規ワークブックのシート1のA1セルに現在時刻を書き出す
④ 新規ワークブックを閉じる
Sub Sample1()
'新規ブックを格納する変数を用意する
Dim NewFile As Workbook
'変数に新規ブックをセットする ※⓵
Set NewFile = Workbooks.Add
'新規ブックを指定したパスで保存する ※⓶
NewFile.SaveAs Filename:="C:\Users\Owner\Desktop\learningpgm\VBA\新規ブックを作成\ファイルA.xlsx"
'作成したファイルのA1セルに現在時刻を出力する ※⓷
NewFile.Worksheets(1).Range("A1") = Now()
'作成したファイルを閉じる(保存する) ※⓸
NewFile.Close SaveChanges:=True
'変数の初期化
Set NewFile = Nothing
End Sub
▽マクロ実行前
ファイルを保存する空のフォルダを用意しました。
マクロを実行するとこのフォルダ内に新規作成したエクセルのワークブックが保存されます。
▽マクロ実行後
「ファイルA」が保存されました。
ファイルを開くとマクロを実行したときの日付と時間が出力されています。
同名のファイルが存在する場合、メッセージを出さずに上書き保存する方法
上で説明したコードでは、すでに同じファイル名(ファイルパス)のファイルが存在する場合、Excelからアラートメッセージが表示されてしまいます。
「はい」のボタンを押した場合はファイルの上書き保存が実行されますが、「いいえ」のボタンが押された場合は処理が先に進めずエラーになってしまいます。
実行時エラー1004「SaveAsメソッドは失敗しました Workbookオブジェクト」
アラートメッセージを出さずに毎回上書きしたい場合は「DisplayAlerts」をFalseに設定しておくことでアラートメッセージを無視することが可能です。
Sub Sample2()
'新規ブックを格納する変数を用意する
Dim NewFile As Workbook
'アラートを表示しない
Application.DisplayAlerts = False
'変数に新規ブックをセットする
Set NewFile = Workbooks.Add
'新規ブックを保存する
NewFile.SaveAs Filename:="C:\Users\Owner\Desktop\learningpgm\VBA\新規ブックを作成\ファイルA.xlsx"
'作成したファイルのA1セルに現在時刻を出力する
NewFile.Worksheets(1).Range("A1") = Now()
'作成したファイルを閉じる(保存する)
NewFile.Close SaveChanges:=True
'変数の初期化
Set TargetFile = Nothing
'アラートの表示設定を戻す
Application.DisplayAlerts = True
End Sub
すでに同名のファイルがあるか先に確認して処理を分岐する方法
同じファイルパスのファイルがあるかどうかを先に確認してその後の処理を分岐させたい場合は、Dir関数を使用してIFで分岐させることも可能です。
▽サンプルコード
① アラートの表示をOFFにする
② 新規ワークブックを保存するパスがすでに存在するか確認する
③ 上書きするかメッセージで確認する
④ 「はい」が選択された場合は処理続行、「いいえ」が選択された場合は処理を中止する
⑤ アラートの表示をONに戻す
Sub Sample3()
'新規ブックを格納する変数を用意する
Dim NewFile As Workbook
'新規ブックのパスを格納する変数を用意する
Dim NewFilePath As String
'メッセージボックスの回答用
Dim anser As VbMsgBoxResult
'アラートを表示しない
Application.DisplayAlerts = False ※⓵
'新規ブックを保存するパスを変数に格納
NewFilePath = "C:\Users\Owner\Desktop\learningpgm\VBA\新規ブックを作成\ファイルA.xlsx"
'同じファイル名のファイルがすでに存在する場合
If Dir(NewFilePath) <> "" Then ※⓶
'メッセージを表示(選択されたボタンを変数にセット)
anser = MsgBox("同名のファイルがすでに存在します。" & vbLf & "上書きしますか?", vbYesNo + vbQuestion + vbDefaultButton1, "確認") ※⓷
'押されたボタンによって処理を分岐
Select Case anser
Case vbNo
MsgBox "処理を中止します。"
Exit Sub ※⓸
End Select
End If
'変数に新規ブックをセットする
Set NewFile = Workbooks.Add
'新規ブックを保存する
NewFile.SaveAs Filename:=NewFilePath
'作成したファイルのA1セルに現在時刻を出力する
NewFile.Worksheets(1).Range("A1") = Now()
'作成したファイルを閉じる(保存する)
NewFile.Close SaveChanges:=True
'変数の初期化
Set NewFile = Nothing
'アラートの表示設定を戻す
Application.DisplayAlerts = True
End Sub
同じファイル名のパスがある場合に表示されるメッセージボックス
「いいえ」が選択された場合は「処理を中止します。」のメッセージを出して新規ブック作成は行わないで終了します。
※コードのコピー利用について
・コードのコピーは自由におこなっていただけます。
・気を付けて作成はしていますがコードには誤りがある可能性があります。
・自身の環境で動作確認をしていますが、すべての方の環境で同様に動くことは保証できません。
・データの破損等の責任は負いかねますのでご自身の責任のもとお使いください。