Excel VBAで学ぶ:ファイル操作の基本

投稿日:2026-01-07

音声

※ AI音声で読み上げます

目次

  1. Workbooks.Openでブックを開く
  2. Workbooks.Add、Close、Saveの使い方
  3. 名前を付けて保存(SaveAs)
  4. 複数ブックの同時操作
  5. Dir関数でフォルダ内のファイル一覧を取得する
  6. 注意(ここだけ)
  7. 要約

Workbooks.Openでブックを開く

Workbooks.Openは指定したパスのブックをVBAで開く基本メソッドです。

フルパスと相対パスの両方が使えます。読み取り専用やパスワードなどの引数も指定できますが、まずはWorkbook変数にセットして確実に参照する習慣をつけることがポイントです。

パスにスペースや日本語があるときは、文字列を正確に書く必要があります。簡単な例です。

Sub OpenSample()
    Dim wb As Workbook
    Dim sPath As String
    sPath = ThisWorkbook.Path & "\Sample.xlsx"
    Set wb = Workbooks.Open(Filename:=sPath, ReadOnly:=True)
    MsgBox "開きました:" & wb.Name
    wb.Close SaveChanges:=False
End Sub

Workbooks.Add、Close、Saveの使い方

新規ブック作成はWorkbooks.Add、保存はSaveまたはSaveAs、閉じるときはCloseを使います。

CloseのSaveChanges引数を明示すると誤保存を防げます。

テンプレート指定やシート数指定も可能で、作成後は通常のWorkbookオブジェクトとして操作します。

ボタンにマクロを割り当てるか、VBEから実行します。例です。

Sub AddSaveCloseSample()
    Dim wb As Workbook
    Set wb = Workbooks.Add
    wb.Sheets(1).Range("A1").Value = "テスト"
    wb.SaveAs Filename:=ThisWorkbook.Path & "\NewBook.xlsx", FileFormat:=xlOpenXMLWorkbook
    wb.Close SaveChanges:=False
End Sub

名前を付けて保存(SaveAs)

SaveAsはファイル名や形式を指定して保存するメソッドです。

マクロを保持したい場合は、拡張子とFileFormatを合わせることがポイントです(例:.xlsmとxlOpenXMLWorkbookMacroEnabledです)。

既存ファイルの上書き確認やユーザー入力での保存名取得は、Application.GetSaveAsFilenameやFileSystemObjectを組み合わせます。

上書きしたくない場合はSaveCopyAsでコピーを作成します。

よくあるミスは拡張子とFileFormatの不一致でマクロが消えることですので、要チェックです。

複数ブックの同時操作

複数のブックを開いて値や数式を移すケースは頻繁にあります。Workbook変数にそれぞれセットして、ActiveWorkbookやActiveSheetに依存せずに扱うのが安全です。処理後は各ブックごとにSave/Closeを呼びます。値コピーはValue、数式はFormulaやFormulaR1C1を使い分けます。例です。

Sub MultiBookSample()
    Dim wb1 As Workbook, wb2 As Workbook
    Set wb1 = Workbooks.Open(Filename:=ThisWorkbook.Path & "\Data1.xlsx")
    Set wb2 = Workbooks.Open(Filename:=ThisWorkbook.Path & "\Data2.xlsx")
    wb2.Sheets(1).Range("A1").Value = wb1.Sheets(1).Range("A1").Value
    wb1.Close SaveChanges:=False
    wb2.Close SaveChanges:=True
End Sub

Dir関数でフォルダ内のファイル一覧を取得する

Dir関数は指定フォルダ内のファイル名を順に取得する簡潔な方法で、ワイルドカード("*.xlsx")で絞れます。

ループ内でOpenと組み合わせれば一括処理が可能ですが、処理中にフォルダの中身が変わると予期せぬ動作になり得ます。必要であれば、事前に一覧を配列やコレクションに格納してから処理すると安定します。例です。

Sub DirLoopSample()
    Dim sFile As String, sFolder As String, wb As Workbook
    sFolder = ThisWorkbook.Path & "\Samples\"
    sFile = Dir(sFolder & "*.xlsx")
    Do While sFile <> ""
        Set wb = Workbooks.Open(Filename:=sFolder & sFile, ReadOnly:=True)
        Debug.Print "処理:" & wb.Name
        wb.Close SaveChanges:=False
        sFile = Dir()
    Loop
End Sub

注意(ここだけ)

  • 最小マクロを残したいファイルは必ず.xlsm形式で保存することがポイントです。拡張子とFileFormatが一致しないと、マクロが失われることがあります。

要約

  1. Workbooks.Openでファイルを確実に開き、Workbook変数で扱います。

  2. Workbooks.Addで作成し、Save/CloseはSaveChangesを明示して操作します。

  3. SaveAsでは拡張子とFileFormatを合わせ、マクロ保存は.xlsmかxlOpenXMLWorkbookMacroEnabledを使います。

  4. 複数ブックは明示的にWorkbook変数で管理し、Activeに依存しないようにします。

  5. Dirでフォルダ内ファイルを列挙し、一括処理の入口に使えますが、処理前に一覧を固めると安定します。