Excel VBAでのファイル操作についてまとめます。
なお、前提として以下のフォルダとファイル構成になっていることとします。
デスクトップに「テスト」というフォルダがあり、その中にExcelファイルが3つ存在します。
ファイルを開く
1 2 3 |
Sub Test() Workbooks.Open ("C:\Users\ユーザー名\Desktop\テスト\1.xlsx") End Sub |
「1.xlsx」のExcelファイルを開きます。
ファイルを開いた際には、アクティブ化されるため、そのまま「1.xlsx」内のデータを扱うときには特にファイル(ブック)の指定は必要ありません。
フォルダ内のファイルをすべて開く
1 2 3 4 5 6 7 8 9 |
Sub Test() Path = "C:\Users\ユーザー名\Desktop\テスト\" 'メモ:開きたいファイルが保存されているフォルダへのパスを変数「Path」に保存 Dim file_name As String 'メモ:ファイル名を保存する文字列型の変数「file_name」を宣言 file_name = Dir(Path & "*") 'メモ:「"*"」とワイルドカードを使うことですべての種類のファイルを開けるよう指定。 (“*.xlsx”)と記載すると拡張子を指定できる Do 'メモ:条件に該当する限り繰り返すDo~While分 Workbooks.Open Filename:=Path & "\" & file_name 'メモ:ファイル名を指定して開く処理。ファイル名は変数「Path」と変数「file_name」に保存されている文字列を組み合わせて指定している。 file_name = Dir Loop Until file_name = "" 'メモ:ファイル名が空白になるまで繰り返す End Sub |
ただし、指定したフォルダ内にファイルが1つもない場合はエラーとなります。そのため、ファイルが1つも存在しない場合は終了させる処理を追加します。
フォルダ内にファイルが1つもない場合
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Sub Test() Path = "C:\Users\ユーザー名\Desktop\テスト\" Dim file_name As String file_name = Dir(Path & "*") If file_name = "" Then Exit Sub End If Do Workbooks.Open Filename:=Path & file_name file_name = Dir Loop Until file_name = "" End Sub |
追加されたのは「If」の節です。
Dir関数はファイルを読み込まなかった場合は長さ0の文字列「””」を返します。
長さ0の文字列「””」が返された=フォルダ内にファイルがなかった場合は「If」節の中で「Exit Sub」として処理を終了させています。
指定したファイルをアクティブにする
1 2 3 |
Sub Test() Workbooks("1.xlsx").Active End Sub |
「1.xlsx」のExcelファイルをアクティブにします。
ファイルを開いた際はアクティブ化されていますが、その後に別のファイルをアクティブにする場合に使用します。
「1.xlsx」のExcelファイルが既に開かれている状態である必要があります。ファイルが開かれていない状態で実行すると以下のエラーが発生します。
ファイルを作成する
1 2 3 |
Sub Test() Workbooks.Add End Sub |
ファイルを作成します。
作成したファイルはアクティブ化されているため、作成したファイル内で操作を行う場合は特にファイルの指定は必要ありません。
アクティブブックのファイルパスを調べる
1 2 3 4 |
Sub Test() Dim Path As String Path = ActiveWorkbook.Path End Sub |
「ActiveWorkbook.Path」というコマンドを使って変数「Path」にアクティブになっているファイルのパスを代入しています。
アクティブブックの名前を確認する
1 2 3 |
Sub Test() Debug.Print.ActiveWorkbook.Name End Sub |
イミディエイトウィンドウ上でブック名が表示されます。
ファイルを保存する
名前を付けて保存
1 2 3 |
Sub Test() ActiveWorkbook.SaveAs ("C:\Users\ユーザー名\Desktop\Test") End Sub |
アクティブ化されているファイルをデスクトップ上に「Test」という名前で名前を付けて保存しています。
上書き保存
1 2 3 |
Sub Test() ActiveWorkbook.Save End Sub |
ファイルを開く、ファイルを閉じる操作は別途必要です。
ファイルを閉じる
保存して閉じる
1 2 3 |
Sub Test() ActiveWorkbook.Close End Sub |
アクティブ化されているファイルを閉じます。
ファイルの保存は別途操作が必要です。
保存せずに閉じる
1 2 3 |
Sub Test() ActiveWorkbook.Close SaveChanges:= False End Sub |
まとめ
日時でデータを取得して集計や分析を行う業務を担当する場合、複数のファイルを扱うことも珍しくありません。
1度にまとめてファイルを操作することができれば、より実務の効率化につながります。
コメント