VBA全般 フォルダ内の全てのファイルに処理を行う方法
統計を取ったりすることが実務上多い時期にさしかかっています。
年度区切りの仕事の場合,3月はとにかく忙しい。
学校だったら,各クラスの帳票に同じ形式のものが使われていて,その全てを集計したり,チェックをしたりすることにVBAを用いると,資料作成に時間をかけずにいきなり確認から入ることができます。
こういう仕事内容はパソコンのほうが得意な仕事なので,何かをする前にまず全体の雰囲気をつかむというためにも次のようなマクロをよく使います。
Option Explicit Sub TestTemp() Application.DisplayAlerts = False Dim strFileName As String Dim PasteSheet As Worksheet, SourceBook As Workbook, SourceSheet As Worksheet Set PasteSheet = ThisWorkbook.Worksheets("集計") PasteSheet.Cells.ClearContents Application.ScreenUpdating = False ' Application.Calculation = xlCalculationManual strFileName = Dir(ThisWorkbook.Path & "\", vbNormal) ' ファイルが見つからなくなるまで繰り返す Do While strFileName <> "" '各ファイルに行う作業---------------------- If strFileName <> ThisWorkbook.Name Then Set SourceBook = Workbooks.Open(ThisWorkbook.Path & "\" & strFileName) Set SourceSheet = SourceBook.Worksheets(1) SourceBook.Close End If '------------------------------------------- ' 次のファイル名を取得 strFileName = Dir() Loop Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True Application.DisplayAlerts = False End Sub
このマクロを貼り付けるExcelBookの中に集計という名のシートを準備しておいて,そこにいろいろ書き出させる。
真ん中の大きな空白部分に,開いたブックやその中のシートに何をするか書くだけです。
状況によっては,再計算すら止めて作業をすることがあります。
このマクロのお手軽なのは,処理を行いたい対象と同じフォルダにいれるだけで,そのフォルダ内の全てのファイルに処理を行うように書いていること。
細かいことぬきにさくっと処理をしたいという手抜きマクロです。
でも,これを知ってからずっと使いまわしているのでとても重宝しています。
数百人のそれぞれ20項目程度あるデータとか,データベースとかからしたらほんの些細なデータなんだと思うんですが,それを手動でやるのはかなり大変です。
そこをこのような繰り返しマクロでささっと複数のブックに処理が行えれば,無駄な時間はかなり減ります。
ネタはなかなか思いつかないんですが,実際職務で久々にこのマクロの外側が入ったブックを探し当てて使ったので,
今後探さずにすむよう自分用の備忘録も兼ねて,載せてみました。変数の宣言や,高速化のための画面更新停止等削れば,ほんとに短いコードですがとてもベンリデスヨ。