- 締切済み
エクセル複数ファイルを1つのファイルにまとめる
例 11月のファイル 12月のファイル 1月のファイル 各ファイル内のシート1だけを新規ファイルに、まとめて 表示できるようなマクロの作り方を教えてください。 たとえば、1月のファイルが途中で上書き保存されていっても 新規ファイルに反映されるようにしたいです。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- kokorone
- ベストアンサー率38% (417/1093)
※集計用ファイルについて 質問者さまが、集計用ファイルにどんな名前をつけているか、そして どのフォルダに保存しているのかによって、コードを修正してください。 ということです。 dst_file1:ファイル名のみ dst_file :フォルダ名+ファイル名 ※VBAの入力について 月別ファイルにVBAを入力後、月別ファイルを上書き保存してく ださい。 ※補足事項 今回のサンプルでは、月別ファイル内のシートを、集計用ファイルに シートごとコピーしています。 月別ファイルの更新時は、集計用ファイルの該当シートを削除後、 シートをコピーし直すという方法をとっています。 不要な情報はコピーしたくない。逆を言えば、必要なセル(範囲) のみを集計用ファイルにコピーするのであれば、それなりの修正 が必要です。 必要なセル(範囲)のみコピーする方法を提示することは可能で すが、範囲がわからないため、「そのものズバリ」を提示するこ とはできません。 あまり複雑で理解できないのであれば、「集計用ファイル内に、 対象となる月別シートを用意しておいて、各々のシートの各々の セルに、月別ファイルの対応するセル参照を行う」方法がシンプル です。
- kokorone
- ベストアンサー率38% (417/1093)
すべての月別ファイルの第一シートのA1セルに月別情報を設定 されるのであれば、 月別ファイルのいずれか1ファイルだけ、第一シートを集計用 ファイルにコピーしてください。 すべての月別ファイルの第一シートを集計用ファイルにコピー してもらっても、問題はありませんが、手間ですよね。 前回提示したマクロは、すべての「月別ファイル」に入れ込みます。 あの後、考えてみたのですが、集計用ファイル内に、対象となる 月別シートを用意しておいて、各々のシートの各々のセルに、月別 ファイルの対応するセル参照を行えば、マクロを入れ込まなくても 可能ですが、これはこれで、結構手間がかかりますよね。
お礼
いまいちうまく行かないのですが 色々とわからない部分と、もう少しシートを工夫できるでしょうか? まず下記のフルパス・・・とありますが C:¥VBA_TEST\VBA_集計.xls とありますが集計ファイル名を、"VBA_集計"にするということですか? 保存先が、"C:\VBA_TEST”ということですか? 新規に、上記の保存先を作るということでいいでしょうか?? ※集計用ファイルについて dst_file = "C:\VBA_TEST\VBA_集計.xls" フルパス dst_file1 = "VBA_集計.xls" ファイル名のみ を質問者さまのファイル仕様にあわせて変更してください。 VBAを入力後、保存してインポート?すればいいのですか? ほんとに素人ですみません・・・ それと、シートを工夫するという件は、 月のファイルシートの中に、入力規則用のデーターをかなり離れた所のセルに つくって有るのですが、ここの部分はシートコピーしたくないので 必要なセル間だけを集計ファイルにまとめることはできるでしょうか?
- kokorone
- ベストアンサー率38% (417/1093)
以下は、私が試行錯誤した方法です。 [前準備] 1)月別ファイルを各々開き、第1シートを選択する。 ※注意事項: 今回は、月別ファイル・第1シートのA1セルに、月別情報があるものとしています。 質問者さまのファイル仕様にあわせて、A1セル以外に変更される場合は、後ほど提示 するプログラムの修正が必要です。 2)「編集」メニュー・「シートの移動とコピー」で集計用ファイルに 第1シートをコピーする。 3)すべての月別ファイルについて2)を行ってください。 (いずれか1ファイルでも、いいですが、その場合、後処理が必要です。) 4)月別ファイルを各々開く 5)「ツール」メニュー・「マクロ」・「」「Visual Basic Editor」を選択する。 6)左側の窓で、「ThisWookBook」を選択する 7)上段中央のプルダウンメニューから、「WookBook」を選択する。 8)上段右のプルダウンメニューから、「BeforeSave」を選択する。 →Private Sub Workbook_BeforeSave が自動生成されます。 9)上記 Workbook_BeforeSave を以下のように変更します。 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim dst_file As String Dim dst_file1 As String Dim src_file1 As String Dim src_sheet As String Dim dst_sheet As String Dim dst_sheet0 As String Dim idx As Integer Dim idx1 As Integer Dim sheet_max As Integer dst_file = "C:\VBA_TEST\VBA_集計.xls" dst_file1 = "VBA_集計.xls" src_file1 = ThisWorkbook.Name Application.ScreenUpdating = False ThisWorkbook.Sheets(1).Select src_sheet = Range("A1").Value Workbooks.Open Filename:=dst_file sheet_max = ThisWorkbook.Sheets.Count For idx = 1 To sheet_max dst_sheet0 = Workbooks(dst_file1).Sheets(idx).Name Workbooks(dst_file1).Sheets(idx).Select dst_sheet = Range("A1").Value If dst_sheet = src_sheet Then Exit For End If Next idx idx1 = idx If idx1 > sheet_max Then idx1 = sheet_max End If Workbooks(src_file1).Activate Sheets(1).Select Range("A1").Select Application.DisplayAlerts = False Sheets(1).Copy After:=Workbooks(dst_file1).Sheets(idx1) If idx <= sheet_max Then Workbooks(dst_file1).Sheets(idx).Select ActiveWindow.SelectedSheets.Delete End If ActiveWorkbook.Save ActiveWorkbook.Close Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub ※月別情報をA1セル以外に変更される場合は src_sheet = Range("A1").Value dst_sheet = Range("A1").Value を変更します。 ※集計用ファイルについて dst_file = "C:\VBA_TEST\VBA_集計.xls" フルパス dst_file1 = "VBA_集計.xls" ファイル名のみ を質問者さまのファイル仕様にあわせて変更してください。 10)月別ファイルを保存します。 →この時、編集中のファイルの第1シートが集計ファイルの該当シートに置き換わります。 ※新しい月別ファイルを作成する場合、必ず、上記4)~10)を行ってください。 [月別ファイル更新時] 月別ファイルを更新し、保存した時、集計ファイルの該当シートを更新します。 新しい月別ファイルを作成した場合、自動的に集計ファイルの最終シートの後ろにシートを追加します。 提示した案は、月別ファイルを保存した時に、集計ファイルの該当シートを更新するものです。 更新するタイミングを変更する場合は、関数名(Workbook_BeforeSave)を変更する必要があります。 動作確認はしましたが、不明な点がありましたら、補足させていただきます。
お礼
回答ありがとうございます 休みが明けたら早速試したいと思います 初めてのマクロ&VBAなのでがんばってみます。
補足
早速試して見たのですが エクセル素人の為 いまいちうまくいかなかったのですが・・・ 下記内容で、 2)「編集」メニュー・「シートの移動とコピー」で集計用ファイルに 第1シートをコピーする。 3)すべての月別ファイルについて2)を行ってください。 (いずれか1ファイルでも、いいですが、その場合、後処理が必要です。) とありますが、集計用ファイルにすべての月ファイルをシートコピーするのでしょうか? 4)月別ファイルを各々開く 5)「ツール」メニュー・「マクロ」・「」「Visual Basic Editor」を選択する。 集計用ファイルに、上記のマクロを作ればいいのでしょうか???
- kokorone
- ベストアンサー率38% (417/1093)
さらに、詳しくお聞かせください。 1月用ファイルは、複数あるのでしょうか? 何が問題かと言うと、 Excelの場合、1ブックを同時にアクセス(更新)できるのは、一人 だけなのです。 仮定1: 複数の1月ファイルを1つの集計用ファイルにまとめる =>同時に複数メンバーが更新した場合、集計用ファイルが更新できない。 仮定2: 単独の1月ファイルを同時に複数メンバーが更新する =>最初に開いたメンバー以外、更新できない。 これらが解決できるのであれば、解決策を提示できると思います。
お礼
1月用ファイルなど 月ごとのファイル数は、1つしかなく 更新するのもAさんが更新し終わったら 次にBさん、Cさんといったかんじで更新する かんじになります。
- kokorone
- ベストアンサー率38% (417/1093)
「たとえば、1月のファイルが途中で上書き保存されていっても 新規ファイルに反映されるようにしたいです。」 とはどういうことでしょうか? すでにまとめられた集計用ファイルの該当シートを、リアルタイムで 更新したいということでしょうか? それならば、新規ではないですよね。 また、一連の作業は、質問者様一人だけが行うものでしょうか? Aさんが12月のファイル、Bさんが1月のファイルを更新したとしたら、集計用ファイルは、一人しかアクセスできません。 そのあたりを明確にしてください。
お礼
kokoroneさんありがとうございます 「たとえば、1月のファイルが途中で上書き保存されていっても 新規ファイルに反映されるようにしたいです。」 とは・・・ うまく表現できなかったのですが、kokoroneさんのいう 『リアルタイムで更新したい』ということです。 一連の作業は、多人数で行うのですが、リアルタイムで更新するファイルは、1月のファイルを多人数で更新するかんじになります これでわかるでしょうか?
お礼
回答ありがとうございます ほぼ自分のやりたいところまでできました 前回の必要なセルというのは・・・ たとえば必要なセルが B3からAC260の範囲のデーターと いった感じです