EXCEL VBA 複数ファイル・ブックの集計処理・1つのワークシートにまとめる(テクニック)
EXCEL VBA 複数ファイル・ブックの集計処理・1つのワークシートにまとめる(テクニック)
●はじめに
社内の事務処理で、アンケートなど配布しそれを集計する作業があると思いますが、紙によるアンケートを配布し、集計するとなると無駄な作業が多くなり、作業に時間が掛かってしまいます。しかし、EXCELファイル等を配布してファイルを回収しても、手動でデータを入力または、「コピー貼り付け」などで纏めると、それもまた時間が掛かってしまいます。集めた複数ファイルが数百~数千件となると手動での作業は、とても大変です。VBAを使って集めたファイルをひとつのファイル(ブック)に纏める方法を使うと簡単に纏めることができますので、そのプログラムの作成方法を説明したいと思います。
●プログラム説明 (サンプル①)
下記のプログラムは、EXCELファイルでアンケートを配布して、そのアンケートに記入してもらった複数ファイルを一つのフォルダーに集めて、その集めたファイルを一つのブックに集計するプログラムです。詳細については、下図を参照して下さい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
Sub アンケートファイルの取り込み処理() Dim Button, T, I, L As Integer Dim OpenExcelFileName, ExcelFileName, ExcelFilePath, FileName As String Dim Kaitou(12) As String Application.DisplayAlerts = False '確認メッセージを無効化します。 T = 5 Button = MsgBox("アンケートファイル取込処理を行いますか?", vbYesNo + vbQuestion, "確認") If Button = vbYes Then OpenExcelFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls?") 'ダイアログを表示取り込むフォルダーにあるファイルを選択します。 If OpenExcelFileName <> "False" Then ExcelFileName = Dir(OpenExcelFileName) '指定したファイルパスからファイル名を代入します。 ExcelFilePath = Replace(OpenExcelFileName, ExcelFileName, "") '指定したファイルパスを指定します。(ファイルパスからファイル名を取り除く) MsgBox ExcelFilePath & "この選択フォルダからデータを読込み込みます。" Else MsgBox "キャンセルされました" Exit Sub 'キャンセルでプログラムを終了します。 End If FileName = Dir(ExcelFilePath & "*.xls?") '指定したフォルダーから一件目のEXCELファイルを指定します。 Do While FileName <> "" '読み込むファイルがなくなるまで繰り返す。 Workbooks.Open FileName:=ExcelFilePath & FileName, ReadOnly:=True, UpdateLinks:=0 ' '※01-----------------------------------(読み込んだアンケートファイルの処理ここから) Sheets("アンケート").Select 'アンケートのシートを選択 L = 0 '配列の0番からの指定 For I = 4 To 14 Kaitou(L) = Cells(I, "C") 'C列のC4~C14のデータをkaitou配列に入れます。 L = L + 1 '配列の番号を加算する(次の配列に移す) Next I ActiveWindow.Close '読み込んだアンケートファイルと閉じます。 '※01-----------------------------------(読み込んだアンケートファイルの処理ここまで) '※02----------------------------------(アンケート集計のファイル処理ここから) Sheets("結果一覧").Select '結果一覧のシートを選択 L = 0 '配列の0番からの指定 For I = 1 To 12 'A列からK列まで繰り返す。 Cells(T, I) = Kaitou(L) '配列dデータから結果一覧に転記する。 L = L + 1 '配列の番号を加算する(次の配列に移す) Next I Cells(T, "L") = "=SUM(G" & T & ":K" & T & ")" '列の結果合計にSUM関数を代入して合計を計算します。 FileName = Dir() '次のファイルを指定する。 T = T + 1 '結果一覧に転記する行を+1加算する。 '※02----------------------------------(アンケート集計のファイル処理ここまで) Loop Range("B1") = T - 5 '読込件数をB1に転記する。 MsgBox "ファイル数" & T - 5 & "件 取り込みました。" '読込件数をMsgBoxで表示 Else MsgBox "処理を中断します" End If Application.DisplayAlerts = True '確認メッセージを有効化します。 End Sub |
●実行前~実行後 ※プログラム実行後、下記の順番で実行されます。
①アンケートファイルを実行するか確認します。
②ダイアログボックスが表示されて、アンケート結果が保存されているフォルダーのファイルを指定します。
③「開く」をクリックして、選択されたファイルのフォルダー内全てのファイルを読み込みます。
④読み込んだファイルを一件ずつ結果一覧に反映されます。
⑤最後に、取り込み件数(読み込んだ件数)が表示されて完了。
①アンケートファイルを実行するか確認します。
②ダイアログボックスが表示されて、アンケート結果が保存されているフォルダーのファイルを指定します。
③「開く」をクリックして、選択されたファイルのフォルダー内全てのファイルを読み込みます。
④読み込んだファイルを一件ずつ結果一覧に反映されます。
⑤最後に、取り込み件数(読み込んだ件数)が表示されて完了。
最後まで、ご覧いただきまして誠に有難うございました。
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。