PR

【ExcelVBA】新規ワークブックを作成して保存する方法と活用例

ExcelVBA-新規ブックを作成-アイキャッチ ブックの操作

新規ワークブックを作成して保存する処理について説明します。

スポンサーリンク

新規ワークブックを作成して保存する方法

ワークブックを新規作成するには「Workbooks.Add」を使用します。

新規ワークブックを一旦変数にセットして、そのあとに指定したフォルダパスに名前を付けて保存します。

‘新規ブックを格納する変数を用意する
Dim NewFile As Workbook

‘変数に新規ブックをセットする
Set NewFile = Workbooks.Add

‘新規ブックを指定したパスで保存する
NewFile.SaveAs Filename:=”ファイルパス

↓のサンプルコードでは以下の処理を行っています。

① 新規ワークブックを作成する
② 新規ワークブックを指定したパスに保存する
③ 新規ワークブックのシート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

▽マクロ実行前
 ファイルを保存する空のフォルダを用意しました。
 マクロを実行するとこのフォルダ内に新規作成したエクセルのワークブックが保存されます。

ExcelVBA-新規ブックを作成-マクロ実行前のフォルダの状態

▽マクロ実行後
 「ファイルA」が保存されました。

ExcelVBA-新規ブックを作成-マクロ実行後のフォルダの状態

ファイルを開くとマクロを実行したときの日付と時間が出力されています。

ExcelVBA-新規ブックを作成-作成されたファイルAの中身
スポンサーリンク

同名のファイルが存在する場合、メッセージを出さずに上書き保存する方法

上で説明したコードでは、すでに同じファイル名(ファイルパス)のファイルが存在する場合、Excelからアラートメッセージが表示されてしまいます。

ExcelVBA-新規ブックを作成-同名ファイルがある場合の確認メッセージ

「はい」のボタンを押した場合はファイルの上書き保存が実行されますが、「いいえ」のボタンが押された場合は処理が先に進めずエラーになってしまいます。

実行時エラー1004「SaveAsメソッドは失敗しました Workbookオブジェクト」

ExcelVBA-新規ブックを作成-アラートメッセージでいいえを押した場合の実行時エラー

アラートメッセージを出さずに毎回上書きしたい場合は「DisplayAlerts」をFalseに設定しておくことでアラートメッセージを無視することが可能です。

‘アラートを表示しない
Application.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で分岐させることも可能です。

’指定したファイルパスがすでにある場合
If Dir(NewFilePath) <> “” Then 
  ’ファイルがある場合の処理
Else
  ’ファイルがない場合の処理
End 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

同じファイル名のパスがある場合に表示されるメッセージボックス

ExcelVBA-新規ブックを作成-同名ファイルがある場合の確認メッセージ

「いいえ」が選択された場合は「処理を中止します。」のメッセージを出して新規ブック作成は行わないで終了します。

ExcelVBA-新規ブックを作成-同名ファイルがある場合の確認メッセージmsgbox
スポンサーリンク

※コードのコピー利用について

・コードのコピーは自由におこなっていただけます。
・気を付けて作成はしていますがコードには誤りがある可能性があります。
・自身の環境で動作確認をしていますが、すべての方の環境で同様に動くことは保証できません。
・データの破損等の責任は負いかねますのでご自身の責任のもとお使いください。

タイトルとURLをコピーしました