• ベストアンサー

エクセル 複数シートの同一セルを別シートへ集計

エクセルで複数sheetの同一セルを集計sheetへコピーしてきて一覧にし、集計するという作業を行なっています。 1~20のsheet(sheet数sheet名は変動します)を作り、一番右側に集計sheetがあります。 集計sheetのA5へsheet1のF10、A6へsheet2のF10・・・(内容は文字列) 集計sheetのB5へsheet1のG10、B6へsheet2のG10・・・(内容は数値) とコピーしていき、B30にはB5~B29の合計がSUM関数で入っています。 VBAで、集計sheetから左側のsheetの指定セルを一気に集計sheetへコピーしてくる方法はないでしょうか。 ただし集計sheetから左側のsheet21とsheet22は集計に入れたくないという式も教えて頂きたいです。 お時間のある方、ご教授下さい。 または別の質問で参考になるようなものがあればアドレスを教えて下さい。 説明が下手で申し訳ないですが、どうぞよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.2

先の解答ちょんぼでした。whileじゃだめですねループします。 if then end if に変えてください。 Sub main() Dim i As Integer Dim target_sheet As Worksheet Dim summary_sheet As Worksheet Set summary_sheet = ThisWorkbook.Worksheets("集計シート") i = 5 For Each target_sheet In ThisWorkbook.Worksheets if target_sheet.Name <> "集計シート" And _ target_sheet.Name <> "sheet21" And _ target_sheet.Name <> "sheet22" then summary_sheet.Range("A" & CStr(i)).Value = target_sheet.Range("F10").Value summary_sheet.Range("B" & CStr(i)).Value = target_sheet.Range("G10").Value i = i + 1 end if Next target_sheet End Sub

r1220
質問者

お礼

yyr446様 無事に1回で成功することが出来ました! ご丁寧に訂正分のアドバイスも頂き、感謝しております。 これで毎月の作業が随分と楽になります。 どうも有難うございました。

その他の回答 (2)

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.3

条件は質問の通り 右端のシートが集計sheet 右から2、3番目がsheet21、22 こちらの条件は一つ 集計sheetのセルA4を空白にしない 文字でも数値でもスペースでも良いので入れといてください Sub test() Dim i As Integer For i = 1 To Worksheets.Count - 3 If Worksheets(Worksheets.Count).Range("a5").Value = "" Then Worksheets(Worksheets.Count).Range("a5:b5").Value = Worksheets(i).Range("f5:g5").Value Else Worksheets(Worksheets.Count).Range("a4").End(xlDown).Offset(1).Resize(1, 2).Value = Worksheets(i).Range("f5:g5").Value End If Next i End Sub こんなもんで、参考になれば

r1220
質問者

お礼

hige_082様 何度か挑戦してみましたが、どうしてもデータが1件しかコピーされてこなかったのです。私の知識不足により大変申し訳ないです。 もっと勉強し、今後ご回答頂いたものを使いこなせるように頑張ります。 貴重なお時間を頂き、大変有難うございました。

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

「sheet数sheet名は変動する」という事はシートを削除したり追加したりするわけですね。 そのような場合、左端のシートとか、左から何番目といったようなハンドリングは、面倒です。左から何番目のシートかをあきらめて、集計シートと集計対象外にしたいsheet21とsheet22の名前を固定にしておけばずっと楽になります。これだけです。 Sub main() Dim i As Integer Dim target_sheet As Worksheet Dim summary_sheet As Worksheet Set summary_sheet = ThisWorkbook.Worksheets("集計シート") i = 5 For Each target_sheet In ThisWorkbook.Worksheets While target_sheet.Name <> "集計シート" And _ target_sheet.Name <> "sheet21" And _ target_sheet.Name <> "sheet22" summary_sheet.Range("A" & CStr(i)).Value = target_sheet.Range("F10").Value summary_sheet.Range("B" & CStr(i)).Value = target_sheet.Range("G10").Value i = i + 1 Wend Next target_sheet End Sub

関連するQ&A