• ベストアンサー

ワークブック内の特定の複数シートの行を纏めるマクロ

1つのワークブック内に複数のシートがあり その中で特定の2シートのみ別シートにまとめたいです どのシートも1行目は見出しとなるため 2行目以降のデータのみ必要となります またデータを結合させた別シートでは最後にA列を基準として並べ替えも行いたいです このような場合はどのようにすればいいのでしょうか? 全てのシートを1つにまとめるというようなマクロは見つかったのですが・・・

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

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.3

こんにちは。 この手の課題は、詳しい仕様情報があれば、 省いても構わない点がハッキリして、より簡単な記述で済む場合もある、とか、 どこまで汎用性を意識するかによってマクロの中身に大きな違いが出るものです。 > このような場合はどのようにすればいいのでしょうか? 直接的でピンポイントな答えを示すのは難しいです。 そういう意味では一例としてお応えすることしか出来ません。 こちらで書いたものも、適当に省いてはいるものの、少しだけ厚めの回答になります。 何が不要かという判断も、実際に使ってみて初めて明るくなるものでしょうから、 使い慣れた頃には、不要な記述をご自分で判断して削除するようにしてください。 ' ' /// シートモジュール不可!!標準モジュールまたはThisWorkbookモジュール用 Sub Re8809081() Const sRefSortKey = "A" ' ソートキー列を指定 Dim colWst As Sheets ' 統合元シート コレクション Dim wst As Worksheet ' 各統合元シート ループ用 Dim nOffset As Long ' タイトルをコピーしないフラグ ' ' 統合元シートを2つ以上、Array関数の内側にシート名の配列として指定   Set colWst = Sheets(Array("Sheet1", "Sheet2")) ' ' === 統合先シートを新規シートとして追加する場合 ===(▼1/2択)   Worksheets.Add ' 引数 After または Before を適宜指定可 ' ' === 統合先シートを既存シートとして指定する場合 ===(▼2/2択) '  Sheets("Sheet3").Select '  Cells.CurrentRegion.Clear ' ' ==============================================(▲以上2者択一)   For Each wst In colWst     wst.Cells.CurrentRegion.Offset(nOffset).Copy ' 各シートをコピー(最初だけタイトル込)     With Cells.CurrentRegion.Columns(1) ' 統合先シートの既存データ領域の一列目 ' ' === 統合元シートに数式がある場合 ===(▼1/2択)       With .Cells(.Cells.Count).Offset(nOffset) ' 統合先シートの貼り付け先セル         .PasteSpecial Paste:=xlPasteAll ' すべて貼付け         .PasteSpecial Paste:=xlPasteValues ' 値のみ貼付け       End With ' ' === 統合元シートに数式がない場合 ===(▼2/2択) '      .Cells(.Cells.Count).Offset(nOffset).PasteSpecial Paste:=xlPasteAll ' すべて貼付け ' ' ================================(▲以上2者択一)     End With     If nOffset = 0 Then nOffset = 1   Next ' ' 統合先シートをソート   Cells.CurrentRegion.Sort Key1:=Columns(sRefSortKey), Order1:=xlAscending, Header:=xlYes   Cells(1).Select End Sub

40104
質問者

お礼

丁寧に構文をいただいてありがとうございます! 考えていた動作が実行できました!! 詳細に書いていただいたのでベストアンサーにさせていただきます!!

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

その他の回答 (2)

回答No.2

どうまとめるのか、示して下さい。例えば片方の最終行の次に並べるとか。 2枚のシート名は、常に同じ名前、あるいは常に左から数えて同じ位置にある必要があります。 どちらにしますか?

40104
質問者

補足

2枚のシート名は常に同じ名前になり、シートの配列も変更はありません 最終的にA列でソートをかけることを考えていたので データは最終行の次に並べても、2行目以降に挿入するでも問題ないです

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

コピペではなく、繰り返し2シートのまとめをするということですね。 必要なシートが都度変わらないのなら、 Dim Ws1 As Worksheet,Ws2 As Worksheet,Ws3 As Worksheet Set Ws1=Worksheets("sheet1") Set Ws2=Worksheets("sheet2") Set Ws3=Worksheets("sheet3") のように、必要なシートをセットして、1,2から3にまとめたらいいと思います。 見出し行は除く範囲を取得するには、例えば、 Dim Rng As Range Set Rng = Cells (1,1).CurrentRegion Set Rng = Rng.Offset(1,0).Resize(Rng.Rows.Count-1,Rng.Columns.Count) とか。 並び替えは、Sortメソッドで行けばいいと思います。 適宜アレンジください。

40104
質問者

お礼

ありがとうございます 試してみます!

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

関連するQ&A