Excel VBAで学ぶ:ファイル操作の基本
音声
目次
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が一致しないと、マクロが失われることがあります。
要約
Workbooks.Openでファイルを確実に開き、Workbook変数で扱います。
Workbooks.Addで作成し、Save/CloseはSaveChangesを明示して操作します。
SaveAsでは拡張子とFileFormatを合わせ、マクロ保存は.xlsmかxlOpenXMLWorkbookMacroEnabledを使います。
複数ブックは明示的にWorkbook変数で管理し、Activeに依存しないようにします。
Dirでフォルダ内ファイルを列挙し、一括処理の入口に使えますが、処理前に一覧を固めると安定します。