dポイントプレゼントキャンペーン実施中!

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

A 回答 (5件)

#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)見だし、罫線も手作業で。

この回答への補足

早速ありがとうございます

さっそくやってみましたがマクロを実行すると「実行時エラー'9':インデックスが有効範囲にありません」とエラーになります。
列数は必要なだけ増やしました。

統合表シートは予め作っておかねばならないのでしょうか?予め統合表を作ってマクロを実行するとエラー表時はでませんが、何もおこりません。

よろしくお願いします。

補足日時:2004/12/19 15:21
    • good
    • 0

#3です。


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

どういたしまして

お礼日時:2004/12/21 18:53

#2です。


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

ありがとうございました

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

お礼日時:2004/12/19 18:57

横レスですが


#2のマクロでは、
「統合表」シートはマクロ実行前に存在しないといけません。
シート名を変更とかでなく、新しく追加しないといけません。
If sh2.Name = "統合表" Then Exit For

If sh2.Name = "統合表" Then nextにした方が良いかも
試してないのでわかりませんけど。
    • good
    • 0
この回答へのお礼

ありがとうございました

#4さんで無事解決しました

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

お礼日時:2004/12/19 19:11

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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!