- ベストアンサー
excel複数ブック・シートからのデータ抽出【解決方法あり】
- excelの複数ブック・シートからデータを抽出する方法を解説します。具体的には、『1月~12月』のブック内の『1日~31日』のシートに作成された日報を集計する方法について紹介します。
- 集計結果を『作業内容集計』というブックにまとめることを目指します。単価の列に金額が入っている場合は、その行全体を抽出し、一年分のデータをまとめたいと考えています。
- マクロを使用する方法もありますが、関数を使用して集計する方法もあります。ただし、excelのバージョンは2003~2010の混在環境であることに留意してください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
回答2に誤りがありましたので訂正させてください。 For shtno=1 to 12 というところが2箇所ありますが、これを一応 For shtno=1 to 31 と訂正してください。ただし、ブック(月)が違えば日数(シート数)も違ってきますので、そこはうまく整合ととってください。つまり、ブック1はシートは31、ブック2は28か29、ブック3は31、ブック4は30といった具合に。
その他の回答 (2)
回答1に誤りがありましたので、プログラムを差し替えさせてください。回答1で注記したことはこの回答にも適用です。 Static gyo As Integer, my3gyo As Integer, tanka As Variant, shtno As Integer, myrange As Range, endno As Integer my3gyo = 2 Workbooks.Open "Book1.xls": 'Book1です For shtno = 1 To 2 Workbooks("Book1.xls").Activate Worksheets(shtno).Activate endno = Cells(Rows.Count, 18).End(xlUp).Row For gyo = 17 To Cells(Rows.Count, 18).End(xlUp).Row Workbooks("Book1.xls").Activate Worksheets(shtno).Select Range(Cells(gyo, 1), Cells(gyo, 23)).Activate Selection.Copy Workbooks("Book3.xls").Activate Range(Cells(my3gyo, 1), Cells(my3gyo, 23)).Activate ActiveSheet.Paste Worksheets(1).Cells(my3gyo, 24) = my3gyo Worksheets(1).Cells(my3gyo, 26) = shtno Worksheets(1).Cells(my3gyo, 27) = gyo Worksheets(1).Cells(my3gyo, 28) = endno my3gyo = my3gyo + 1 Next Next Workbooks.Open "Book2.xls": 'Book2です For shtno = 1 To 2 Workbooks("Book2.xls").Activate Worksheets(shtno).Activate endno = Cells(Rows.Count, 18).End(xlUp).Row For gyo = 17 To Cells(Rows.Count, 18).End(xlUp).Row Workbooks("Book2.xls").Activate Worksheets(shtno).Select Range(Cells(gyo, 1), Cells(gyo, 23)).Activate Selection.Copy Workbooks("Book3.xls").Activate Range(Cells(my3gyo, 1), Cells(my3gyo, 23)).Activate ActiveSheet.Paste Worksheets(1).Cells(my3gyo, 24) = my3gyo Worksheets(1).Cells(my3gyo, 26) = shtno Worksheets(1).Cells(my3gyo, 27) = gyo Worksheets(1).Cells(my3gyo, 28) = endno my3gyo = my3gyo + 1 Next Next ' End Sub
『1月~12月』というブックは作成されているので 、『1日~31日』というシートを作成し >> 回答いたします。ただしブックの名前をBook1.xls,Book2.xlsなどとしております。また集計用のブックはBook13.xlsとしております。シート名はこだわりませんがただプログラムでは並びの左から1,2、と取り扱います。 下のマクロのプログラムにはBOOK2までの分しか書いていませんので、それからあとはうえにならってご自分で書いてください。 Sub Macro2() ' ' Macro2 Macro ' マクロ記録日 : 2013/3/13 ユーザー名 : ' Dim gyo As Integer, my3gyo As Integer, tanka As Variant, shtno As Integer my3gyo = 2 Workbooks.Open "Book1.xls": 'Book1です For shtno = 1 To 12 Worksheets(shtno).Activate For gyo = 17 To Cells(Rows.Count, 1).End(xlUp).Row Workbooks.Open "Book1.xls" tanka = Cells(gyo, 18) Workbooks("Book13.xls").Activate Worksheets(1).Cells(my3gyo, 18) = tanka my3gyo = my3gyo + 1 Next Next Workbooks.Open "Book2.xls": 'Book2です For shtno = 1 To 12 For gyo = 17 To Cells(Rows.Count, 1).End(xlUp).Row Workbooks.Open "Book2.xls" tanka = Cells(gyo, 18) Workbooks("Book13.xls").Activate Worksheets(1).Cells(my3gyo, 18) = tanka my3gyo = my3gyo + 1 Next Next ' End Sub
お礼
ありがとうございました。 整合性をとり、少しアレンジした所、うまく集計できました。