- 締切済み
複数のシートをひとつにまとめたい
同じブック内の複数のシートをひとつのシートにまとめたいです。 おそらくVBAで処理しないとだめだと思われます。 どなたか作っていただけないでしょうか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- rukuku
- ベストアンサー率42% (401/933)
>・各シートはMAXで100行くらいです。シートごとに違います。 >・エクセルのバージョンは2003です。 シートが40枚くらいならMAXで40,000行、Excel2003で扱える行数が65,536行ですからギリギリOK位の感じです。 >・行数が一定なら、簡単です。:行数は一定ではないです。 >・「絶対に空白でない列」があるならば:列は全て空白ではないです。 >End(xlUp)を使ってやると思うのですが。。。 お察しの通りEnd(xlUp)が便利です Cells(Rows.Count, "A").End(xlUp).Row を使って各シートの最終行を拾います。 [A65536].End(xlUp).Row でもいいのですが、Excel2007対応のためです。(いずれにせよ一番下までデータを入れることはないというのが前提です。) コピー先の行の取得も同様に行います。 後は各シートをでコピーして、コピー先の一番下に貼り付けるだけです。 以下は、同じフォルダにある”Book2”を開き、自分のシートに順次コピーするプログラムのサンプルです。 1行目はタイトル行と想定して、2行目からコピーします。 一様サンプルは示しましたが、利用は「自己責任」でお願いします。 このプログラムを使用して損害が生じても、私は一切の責任を負いません(悪意のあるプログラムではないのは、解読すれば分かると思います。結果が思い通りにならなくて損害が生じた場合でも責任は負わないという意味です)。 Sub シート統合() Dim SourceBook As Workbook Dim i As Long Dim LastRow As Long ThisWorkbook.Activate Worksheets(1).Select Cells.Clear Set SourceBook = Workbooks.Open(ThisWorkbook.Path & "\Book1.xls") For i = 1 To SourceBook.Worksheets.Count With SourceBook.Worksheets(i) .Activate LastRow = .Cells(Rows.Count, "A").End(xlUp).Row .Rows("2:" & LastRow).Copy ThisWorkbook.Sheets(1).Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) End With Next i ThisWorkbook.Activate End Sub
- rukuku
- ベストアンサー率42% (401/933)
こんにちは >どなたか作っていただけないでしょうか? ご質問の内容から、おおまかな状況は分かりました。 VBAならば多分出来ます。 ただし、実際のデータ無しに作ることは出来ませんし、責任が伴いますので、このサイトでプログラムを回答することは私には出来ません。 問題解決のためのアドバイスだけならば出来ます。 一番問題になるのは、各シートにあるデータの行数です。 ・行数が一定なら、簡単です。 ・「絶対に空白でない列」があるならば、 その列を使って最終行を拾うことも出来ます。 また、各シートのデータのおおまかな行数と、Excelのバージョンを教えてください。 あまりデーターの行数が多いと、Excelの仕様上、一枚のシートに収まらないことがあります。
- nine999
- ベストアンサー率44% (512/1140)
まず、コピーは試してみましたか? 元のシートから必要な範囲を選択してコピー、集めたい場所でペーストします。 セル番号が変わっても追従するようにできているので、逆にVBAを設定していないうちにやる方が良いです。(VBAは追従しない) ほとんど、コピーペーストだけでうまく行くと思いますよ。ペースト時に、重ならない位置を選ぶのがポイントです。
補足
40枚くらいシートがあるので手作業ではやっかいだと思い、VBAを作りたいと思ったのです。
補足
・行数が一定なら、簡単です。:行数は一定ではないです。 ・「絶対に空白でない列」があるならば:列は全て空白ではないです。 ・各シートはMAXで100行くらいです。シートごとに違います。 ・エクセルのバージョンは2003です。 End(xlUp)を使ってやると思うのですが。。。 宜しくお願い致します。 目黒