• ベストアンサー

EXCEL 複数シートを1つのシートに集約する方法

1つのブックに複数(30程度)の同一フォームのシートがあり、それらを1つのシートにまとめる方法があれば教えて下さい。 データを統合(集計)するわけではなく、単純にシート1の最後のデータの次の行にシート2のデータを追加、同様にシート3~最後のシートのデータを次々に追加したいのです。 手作業でデータをコピー&ペーストでももちろん可能ですが、結構時間がかかりますので簡単なマクロでできれば助かります。 よろしくお願いします。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.2

#1です。VBAで シートを挿入します。「統合表」と言うシート名に変えます Sub test01() Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("統合表") j = 2 '統合表のデータ書きこみ開始行 For Each sh2 In ActiveWorkbook.Worksheets If sh2.Name = "統合表" Then Exit For '統合表は統合対象外 d = sh2.Range("A65536").End(xlUp).Row '各シートの最終行を知る ' MsgBox d For i = 2 To d '各シートの開始行2から最終行まで統合表に移す sh1.Cells(j, "A") = sh2.Cells(i, "A") sh1.Cells(j, "B") = sh2.Cells(i, "B") '列数だけこの後にコードを増やすこと j = j + 1 '統合表の直下行をポイント Next i Next End Sub 修正や注意が必要な点 (1)もし各シートのデータ開始行が第2行からでない時は、For i = 2 To d の2を変える。 (2)データシートの列数に合わせて sh1.Cells(j, "B") = sh2.Cells(i, "B") の下へBのところをC,D、E、F・・ のコードを作っていれてください。 (3)値だけの集積になってます。各列書式は手作業で。 (4)見だし、罫線も手作業で。

kkaazzuu
質問者

補足

早速ありがとうございます さっそくやってみましたがマクロを実行すると「実行時エラー'9':インデックスが有効範囲にありません」とエラーになります。 列数は必要なだけ増やしました。 統合表シートは予め作っておかねばならないのでしょうか?予め統合表を作ってマクロを実行するとエラー表時はでませんが、何もおこりません。 よろしくお願いします。

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

#3です。 >「コンパイルエラー Nextに対するForがありません」というエラーメッセージが出ます 試してなかったので不安だったのですが、 やっぱりダメでしたか… いい加減なことを言ってすみませんでした。 <(_ _)>

kkaazzuu
質問者

お礼

どういたしまして

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

#2です。 >統合表シートは予め作っておかねばならないのでしょうか YES。初めの部分に、「シートを挿入します。「統合表」と言うシート名に変えます」と説明してます。 >予め統合表を作ってマクロを実行するとエラー表時はでませんが それで予想通りです。 >何もおこりません。 私はシート3枚+統合表でテスト済みで、上手く行きました。 ●「統合表」をシートの最後(一番右端)に移動してやって見てください。 ●ツール-マクロ-VBEで、VBEの画面になりますが、そこでメニューの挿入-標準モジュールをクリックして出てくる画面に、#2のコードを貼りつけて、F5キー(実行に当たる)を押してください。(問題は標準モジュール) ●実行する時貼りつけたコードの途中のどこでも1箇所を クリックしておいて、実行する。範囲外だとエラーや他のVBAコードが実行されることになる。 ●#3でご指摘のようにすると良いかもしれません。 統合表が一番左にあると、そこでExitForだと、ForEachの外へ飛んでしまって、終わってしまうのかもしれないので、ThenNextとするのが良いかも知れない。または上述のように一番最後に統合表を持ってくるとか。 ●統合表に累積されていく順序は、シートタブの左からの順序です。これもプログラム実行前に、都合の良いようにシート順を並べておいてください。

kkaazzuu
質問者

お礼

ありがとうございました 統合表シートを右端に移動してマクロを実行したらできました。 本当にありがとうございました。

すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

横レスですが #2のマクロでは、 「統合表」シートはマクロ実行前に存在しないといけません。 シート名を変更とかでなく、新しく追加しないといけません。 If sh2.Name = "統合表" Then Exit For を If sh2.Name = "統合表" Then nextにした方が良いかも 試してないのでわかりませんけど。

kkaazzuu
質問者

お礼

ありがとうございました #4さんで無事解決しました ただ If sh2.Name = "統合表" Then Exit Forを If sh2.Name = "統合表" Then next に直して実行すると「コンパイルエラー Nextに対するForがありません」というエラーメッセージが出ます

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.1

http://okweb.jp/kotaeru.php3?qid=1132877と同じです。 この中の私の関数式での回答をご覧下さい。 こちらはマクロでも良いと言うことなので別途考えてみます。

すると、全ての回答が全文表示されます。

関連するQ&A