この記事では【Excel】VBAマクロでフォルダ内のファイルを順番に処理(開く:計算して保存など)する方法について解説していきます。
ポイントとしては、Dir関数、FileSystemObjectを使用してフォルダ内のファイル一覧を取得し、Workbooks.Open、Close、SaveAsメソッドでファイルを操作することです。
なお、下記の解説では完全な初心者でもわかりやすいようにあえて変数名(あなた自身が名付けていい場所)を少々変わった名称にしております。
そのため、あなた自身がご活用の際には、ここを適切な(英語表記でしっくりくるものが一般的)ものに変更してご活用くださいね。
それでは詳しく見ていきましょう!
VBAマクロでフォルダ内のxlsxファイルを順番に処理する方法【各ファイルのファイル名とA列2行目から最終行までの合計値をmatome.xlsxに順々に追記して保存する】
それではまず、VBAマクロでフォルダ内のxlsxファイルを順番に処理し、各ファイルのファイル名とA列2行目から最終行までの合計値をmatome.xlsxに順々に追記して保存する方法について解説していきます。
Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。
Sub processXlsxFiles()
' 処理対象フォルダのパス
Dim taishouFolderPath As String
taishouFolderPath = "C:\Users\username\Desktop\Target\"
' 処理結果を保存するファイルのパス
Dim matomeFilePath As String
matomeFilePath = "C:\Users\username\Desktop\matome.xlsx"
' 処理対象ファイルの拡張子
Dim taishouFileExt As String
taishouFileExt = "*.xlsx"
' FileSystemObjectの設定
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
' 処理対象フォルダ内のファイル一覧を取得
Dim taishouFile As String
taishouFile = Dir(taishouFolderPath & taishouFileExt)
' 処理結果を保存するブックを開く
Dim matomeBook As Workbook
Set matomeBook = Workbooks.Open(matomeFilePath)
' 処理結果を保存するシートを設定
Dim matomeSheet As Worksheet
Set matomeSheet = matomeBook.Sheets(1)
' 処理結果の書き込み開始行を設定
Dim kakikomiGyou As Long
kakikomiGyou = matomeSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1
' 各ファイルを処理
Do While taishouFile <> ""
' 処理対象ブックを開く
Dim taishouBook As Workbook
Set taishouBook = Workbooks.Open(taishouFolderPath & taishouFile)
' 処理対象シートを設定
Dim taishouSheet As Worksheet
Set taishouSheet = taishouBook.Sheets(1)
' A列の2行目から最終行までの合計値を計算
Dim lastRow As Long
lastRow = taishouSheet.Cells(Rows.Count, 1).End(xlUp).Row
Dim goukeiValue As Double
goukeiValue = Application.WorksheetFunction.Sum(taishouSheet.Range("A2:A" & lastRow))
' 処理結果をmatome.xlsxに書き込む
matomeSheet.Cells(kakikomiGyou, 1).Value = taishouFile
matomeSheet.Cells(kakikomiGyou, 2).Value = goukeiValue
kakikomiGyou = kakikomiGyou + 1
' 処理対象ブックを閉じる
taishouBook.Close savechanges:=False
' 次の処理対象ファイルを取得
taishouFile = Dir()
Loop
' 処理結果を保存してmatome.xlsxを閉じる
matomeBook.Close savechanges:=True
' 完了メッセージを表示
MsgBox "処理が完了しました。"
End Sub
コードのAlt+F8を押し、マクロ選択画面でprocessXlsxFiles関数を実行します。
このコードでは以下のような処理を行っています。
1. 処理対象フォルダのパスと処理結果を保存するファイルのパスを設定
2. FileSystemObjectを使って処理対象フォルダ内のファイル一覧を取得
3. 処理結果を保存するブックとシートを開く
4. 各処理対象ファイルを開き、A列2行目から最終行までの合計値を計算
5. 処理結果(ファイル名と合計値)をmatome.xlsxに追記
6. 処理対象ファイルを閉じ、次のファイルを処理(4-6を繰り返す)
7. 全ファイルの処理が終わったら、matome.xlsxを保存して閉じる
VBAマクロでフォルダ内のxlsxファイルを順番に処理する方法【各ファイルのファイル名の末尾に_shoriを追加して、順々に新規保存する】
続いては、VBAマクロでフォルダ内のxlsxファイルを順番に処理し、各ファイルのファイル名の末尾に_shoriを追加して順々に新規保存する方法について解説していきます。
Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。
Sub renameAndSaveXlsxFiles()
' 処理対象フォルダのパス
Dim taishouFolderPath As String
taishouFolderPath = "C:\Users\username\Desktop\Target\"
' 処理後ファイルを保存するフォルダのパス
Dim hozonFolderPath As String
hozonFolderPath = "C:\Users\username\Desktop\Processed\"
' 処理対象ファイルの拡張子
Dim taishouFileExt As String
taishouFileExt = "*.xlsx"
' FileSystemObjectの設定
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
' 処理対象フォルダ内のファイル一覧を取得
Dim taishouFile As String
taishouFile = Dir(taishouFolderPath & taishouFileExt)
' 各ファイルを処理
Do While taishouFile <> ""
' 処理対象ブックを開く
Dim taishouBook As Workbook
Set taishouBook = Workbooks.Open(taishouFolderPath & taishouFile)
' ファイル名の末尾に"_shori"を追加
Dim newFileName As String
newFileName = Left(taishouFile, InStrRev(taishouFile, ".") - 1) & "_shori.xlsx"
' 新しいファイル名で保存
taishouBook.SaveAs fileName:=hozonFolderPath & newFileName, FileFormat:=xlOpenXMLWorkbook
' 処理対象ブックを閉じる
taishouBook.Close savechanges:=False
' 次の処理対象ファイルを取得
taishouFile = Dir()
Loop
' 完了メッセージを表示
MsgBox "処理が完了しました。"
End Sub
コードのAlt+F8を押し、マクロ選択画面でrenameAndSaveXlsxFiles関数を実行します。
このコードでは以下のような処理を行っています。
1. 処理対象フォルダと処理後ファイルを保存するフォルダのパスを設定
2. FileSystemObjectを使って処理対象フォルダ内のファイル一覧を取得
3. 各処理対象ファイルを開く
4. ファイル名の末尾に”_shori”を追加した新しいファイル名を生成
5. 新しいファイル名で別フォルダに保存
6. 処理対象ファイルを閉じ、次のファイルを処理(3-6を繰り返す)
以上で、フォルダ内のすべてのxlsxファイルのファイル名の末尾に”_shori”を追加して、新しいフォルダに保存することができます。
まとめ VBAマクロでフォルダ内のファイルを順番に処理(保存など)する方法
ここでは、VBAマクロでフォルダ内のファイルを順番に処理(開く:計算して保存など)する方法について確認しました。
マクロの扱いになれさらに快適な生活を送っていきましょう。