- ベストアンサー
EXCELに関する質問
いつもお世話になってます。 EXCELファイルの同じフォームに入力された月別の作業工数集計表があります。 月毎なので、1年間でファイルが12個できます。 例えば全てのファイルでC1~C10に各作業項目の1ヶ月の合計時間があって これを年度末集計したいのですが、マクロ等で簡単に集計出来ないでしょうか?
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
どなたもマクロでの方法はお答えになってないようですので・・・・。 集計先のファイルの標準モジュールに以下をコピペ 集計用のシートを「集計」という名前にしておいてください。 集計元のファイルは各、1枚目のシートに1ヶ月の合計があるものとします。 Sub test() Dim mb As Workbook, wb As Workbook Dim myfdr As String, fname As String Dim n As Integer, x As Integer Application.ScreenUpdating = False '画面更新を一時停止 Set mb = ThisWorkbook myfdr = ThisWorkbook.Path ' Path取得 fname = Dir(myfdr & "\*.xls") 'フォルダ内のExcelファイルを検索 With mb.Sheets("集計") Do Until fname = Empty '全て検索し終えると、fname = Empty となるので、その間以下を実行 If fname <> mb.Name Then 'ファイル名がこのファイルじゃなければ Set wb = Workbooks.Open(myfdr & "\" & fname) '選択したファイルを開く wb.Sheets(1).Range("C1:C10").Copy 'C1:C10をCopy .Range("C2:C11").Offset(0, n).PasteSpecial Paste:=xlPasteValues '集計シートのC2:C11に値を貼り付け Application.CutCopyMode = False .Range("C1").Offset(0, n).Value = wb.Name '集計シートのC1に貼り付け元のファイル名 .Range("C12").Offset(0, n).FormulaR1C1 = "=SUM(R[-10]C:R[-1]C)" '縦の合計 n = n + 1 'カウント wb.Close '選択したファイルを閉じる End If fname = Dir '選択したフォルダ内の次のExcelファイルを検索します Loop '繰り返 x = Range(.Range("C1"), .Range("C1").End(xlToRight)).Columns.Count '列数取得 .Range("C2:C12").Offset(0, n).FormulaR1C1 = "=SUM(RC[-" & x & "]:RC[-1])" '横の合計 End With Application.ScreenUpdating = True '画面更新一時停止を解除 MsgBox n & "件のブックのC1:C10を転記&集計しました。" End Sub
その他の回答 (5)
- merlionXX
- ベストアンサー率48% (1930/4007)
No5です。 書きもれました。 集計先のファイルと、集計元の12個のファイルは同じフォルダーにいれてください。そのフォルダーには他のエクセルのファイルは入れないで下さい。同じフォルダー内の、集計先以外の全てのエクセルファイルを順次開き、各1枚目のシートのC1:C10を集計先に持ってくるマクロになっていますから
- Nouble
- ベストアンサー率18% (330/1783)
あの~ 特段フルパス指定しなくても セーブしてるエクセルのファイルならば 当該ブックを開いておき、対象セルをクリックするだけで 参照先ファイルが閉じられたときに エクセルが勝手にフルパスを読み出して フルパス指定に変えてくれると思いますよ? パス指定するなとしたら相対参照パスでしょうかね 口幅ったいことを言って済みません <( _ _ )>
同じセル位置にあるデータを合計するのは簡単です。 「1月」から「12月」の「セルA60」の数値を「年報」に合計するときは、まず「年報」を開き、合計を入れたいセルを選択して、=SUM( と入力します。 そしてそのままシフトキーを押し、「1月」のシート名をクリックします。続いて「12月」をクリックします。続いてセルA60をクリックするだけで答えが書かれます。 =SUM(1月:12月!A60)と表示されるはずです。
- pauNed
- ベストアンサー率74% (129/173)
こんにちは。 ファイル名をフォルダからフルパスで設定してあげれば、必ずしも開いておく必要はないですネ。 例えばDドライブの TEST というフォルダにあれば ='D:\TEST\[Book1.xls]Sheet1'!$C1+'D:\TEST\[Book2.xls]Sheet1'!$C1+'D:\TEST\[Book3.xls]Sheet1'!$C1...続く となります。 ただ、フォルダの階層が深ければ複雑になるので、一旦作業列に各ファイルの値を参照して、 それを合計したほうが良いかもしれません。
- Cupper
- ベストアンサー率32% (2123/6444)
マクロは不要です。 他のファイル(ブック)を参照するだけですのでマクロを設定する必要はありません。 (ファイルを全て開いておく必要がありますが) Book1のSheet1のA1に"1" Book2のSheet1のA1に"2" と数値が入力されているとき、Book3の適当なセルに =[Book1]Sheet1!A1+[Book2]Sheet1!A1 と数式を設定するとBook1とBook2のSheet1A1から数値を参照して "3"と和を表示します。 この様に他のファイル(ブック)を参照して計算ができるので工夫してみてください。 ※月ごとにシートで分けてあれば複数のファイル(ブック)を開く必要はないんですけどね。