プロが教えるわが家の防犯対策術!

Excel2000を使って、出庫実績表を作っています。

その表は、注文番号ごとにシートを分けて管理しています。
現在シートは10枚程度です。
各シートのフォーマット(項目名・開始位置・書式など)は全て同じですが、
データの個数(行数)はバラバラです。

これらのシートの内容を、元のシートはそのままにして、
同じブック内の新しいシートに1つにまとめたいのです。
この時、特に並べ替え・集計などは必要無く、
ただ、シート1の内容の下にシート2の内容、その下にシート3の内容...
といった感じで、ただデータを下に続けてコピーさせたいだけです。
(もちろん、シート2からの項目名は要りません。データの内容のみのコピーです)

簡単に出来る方法は無いでしょうか?
ご教授いただきたく、よろしくお願いします。m(__)m

A 回答 (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
    • good
    • 1
この回答へのお礼

ja7awuさん、こんにちは。
すごいマクロを組んで頂いて、感激です!(;O;)
これで、いちいちコピペしなくてすみますね。
今後活用させて頂きます。
本当にありがとうございました!m(__)m

お礼日時:2003/03/28 20:28

内容から察すると、データ範囲行だけをコピーして新しいシートに


まとめる ということだ思います。

下記のコードを実行すると一番左側に「全データ」というシートが出来ます。
一応、操作手順を書いておきます。

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
 
    • good
    • 0

こんにちは。



マクロなら、、
下記はコピーする表のタイトル行先頭が 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
    • good
    • 0
この回答へのお礼

papayukaさん、はじめまして。
すごいぃ、マクロをありがとうございます!(>▽<)!!
やはりこういう作業っていうのはマクロになるんですね。
早速実行させていただきます。
ありがとうございました。m(__)m

お礼日時:2003/03/28 20:25

クリップボードを使って、まず全部のデータをコピーして、新しいシートにすべて貼り付けする。

コレじゃ、ダメですか?
    • good
    • 0
この回答へのお礼

poku98さん、ご回答ありがとうございました。
クリップボードでのコピペですが、今後各シートのデータ量とシート自体も増えていきますので、ツライかなぁと思ってここに質問させて頂いたんです...。
アドバイスをありがとうございました。m(__)m

お礼日時:2003/03/28 20:21

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