- ベストアンサー
同一ブック内・別シートの内容を1つにまとめたいのですが...
Excel2000を使って、出庫実績表を作っています。 その表は、注文番号ごとにシートを分けて管理しています。 現在シートは10枚程度です。 各シートのフォーマット(項目名・開始位置・書式など)は全て同じですが、 データの個数(行数)はバラバラです。 これらのシートの内容を、元のシートはそのままにして、 同じブック内の新しいシートに1つにまとめたいのです。 この時、特に並べ替え・集計などは必要無く、 ただ、シート1の内容の下にシート2の内容、その下にシート3の内容... といった感じで、ただデータを下に続けてコピーさせたいだけです。 (もちろん、シート2からの項目名は要りません。データの内容のみのコピーです) 簡単に出来る方法は無いでしょうか? ご教授いただきたく、よろしくお願いします。m(__)m
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No.3 ですが、何回実行してもいいようにしました。 見出しが複数行あってもいいように、データ先頭行(見出しの下)を 指定するようにしました。(3行目で指定) Sub MkAllDataSheet() Dim N As Integer Const DataTopRow = 2 'データの開始行を指定 Application.DisplayAlerts = False For N = 1 To Worksheets.Count If Worksheets(N).Name = "全データ" Then Worksheets(N).Delete Exit For End If Next N Application.DisplayAlerts = True Worksheets(1).Copy Before:=Sheets(1) ActiveSheet.Name = "全データ" For N = 3 To Worksheets.Count With Worksheets(N) .Range(.Rows(DataTopRow), .Rows(DataTopRow).End(xlDown)).Copy End With Rows(Range(Rows(1), Rows(1).End(xlDown)) _ .Rows.Count + 1).Insert Shift:=xlDown Next N Application.CutCopyMode = False Range("A1").Select End Sub
その他の回答 (3)
- ja7awu
- ベストアンサー率62% (292/464)
内容から察すると、データ範囲行だけをコピーして新しいシートに まとめる ということだ思います。 下記のコードを実行すると一番左側に「全データ」というシートが出来ます。 一応、操作手順を書いておきます。 1.Alt + F11 で VBE(Visual Basic Editor)を開きます。 2.VBE のメニューから[挿入] -->[標準モジュール] を指定します。 3.モジュールウィンドウに下記コードをコピーして貼り付けます。 4.Alt + Q (または、右上隅の×)でウィンドウを閉じ、シートに戻ります。 5.実行するときは、メニューから[ツール]-->[マクロ]-->[マクロ]で 「MkAllDataSheet」を指定し、[実行]ボタンを押します。 Sub MkAllDataSheet() Dim N As Integer Worksheets(1).Copy Before:=Sheets(1) ActiveSheet.Name = "全データ" For N = 3 To Worksheets.Count With Worksheets(N) .Range(.Rows(2), .Rows(2).End(xlDown)).Copy End With Rows(Range(Rows(1), Rows(1).End(xlDown)) _ .Rows.Count + 1).Insert Shift:=xlDown Next N Application.CutCopyMode = False Range("A1").Select End Sub
- papayuka
- ベストアンサー率45% (1388/3066)
こんにちは。 マクロなら、、 下記はコピーする表のタイトル行先頭が G5 の例 Sub aa() Const myRow = "G", myCol = "5" Dim LRow As Long, sCnt As Integer, i As Integer Dim cSheet As Worksheet, rRange As Range Application.ScreenUpdating = False sCnt = Worksheets.Count Worksheets(1).Copy after:=Worksheets(sCnt) Set cSheet = ActiveSheet For i = 2 To sCnt Set rRange = Worksheets(i).Range(myRow & myCol).CurrentRegion Set rRange = rRange.Offset(1, 0). _ Resize(rRange.Rows.Count - 1, rRange.Columns.Count) rRange.Copy LRow = cSheet.Range(myRow & "65536").End(xlUp).Row + 1 cSheet.Range(myRow & LRow).PasteSpecial (xlPasteAll) Application.CutCopyMode = False Next i End Sub
お礼
papayukaさん、はじめまして。 すごいぃ、マクロをありがとうございます!(>▽<)!! やはりこういう作業っていうのはマクロになるんですね。 早速実行させていただきます。 ありがとうございました。m(__)m
- poku98
- ベストアンサー率42% (47/111)
クリップボードを使って、まず全部のデータをコピーして、新しいシートにすべて貼り付けする。コレじゃ、ダメですか?
お礼
poku98さん、ご回答ありがとうございました。 クリップボードでのコピペですが、今後各シートのデータ量とシート自体も増えていきますので、ツライかなぁと思ってここに質問させて頂いたんです...。 アドバイスをありがとうございました。m(__)m
お礼
ja7awuさん、こんにちは。 すごいマクロを組んで頂いて、感激です!(;O;) これで、いちいちコピペしなくてすみますね。 今後活用させて頂きます。 本当にありがとうございました!m(__)m