• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル のマクロで 複数の表を1つにまとめたい)

エクセルマクロで複数の表をまとめる方法

このQ&Aのポイント
  • エクセルのマクロを使用して、複数の表を1つにまとめる方法について教えてください。
  • 具体的な表の例として、みかん、りんご、バナナの表をマクロで1つの表にまとめたいです。
  • 初心者向けに、マクロ内での解説を付けて教えていただけると助かります。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

No.2です! 各行の説明をご希望だということなので・・・ もう一度コードをコピー&ペーストします。 Sub test() '変数の宣言(長整数型) Dim i, j As Long '変数「i」は2~A列最終行まで For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row '変数「j」は1~9まで4行置き(A・E・I列を取得) For j = 1 To 9 Step 4 'M列最終行の1行下の・・・ With Cells(Rows.Count, 13).End(xlUp).Offset(1) '値はi行j列目の値 .Value = Cells(i, j) '表示形式は「月/日」 .NumberFormatLocal = "m/d" 'M列最終行の1行下の1列右隣の値はセル番地(i,j)の1列右隣の値 .Offset(, 1) = Cells(i, j + 1) 'M列最終行の1行下の2列右隣の値はセル番地(i,j)の2列右隣の値 .Offset(, 2) = Cells(i, j + 2) End With '次の「j」で同様の操作 → 次の「i」で同様の操作(変数宣言の最後まで) Next j Next i '変数の宣言 Dim k As Long 'kはM列の最終行 k = Cells(Rows.Count, 13).End(xlUp).Row 'M2セル~O列最後の範囲をM1セルのキーで昇順に並び変え Range(Cells(2, 13), Cells(k, 15)).Sort Key1:=Cells(i, 13), order1:=xlAscending End Sub 長々と失礼しました。m(__)m

mgjp7
質問者

お礼

解説までつけていただきありがとうございます。 大変参考になりました。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

この程度のものは>コメント付きで解説いただけると、なんて言わず、勉強するべきだ。 ABC とEFG とIJK列のデータの最終行は、A,E,I列の最下行を割り出せば良いだろう。 最下行番号は Sub test01() 'A列の最終行の行番号 d1 = ActiveSheet.Range("A65536").End(xlUp).Row MsgBox d1 End Sub で判る。それが判れば、その範囲A,B,C列の範囲は range("A2:C" & d1).Copyでコピー出来る。 これをMNO列に貼り付ける。 Sub test01() d1 = ActiveSheet.Range("A65536").End(xlUp).Row MsgBox d1 Range("A2:C" & d1).Copy Destination:=Range("M2") End Sub その後のEFG列データの場合は、M列のデータの最終行の次行からに貼り付ける。最初は第2行目であるが、EFG,IJKの場合に行くにつれ下に下がった位置になる。 ーー あとMNO列データを日付でソートしているようだ。 これはマクロの記録を採ればよい。 範囲の最終行は上記のコードの応用で出来る。MNO列を範囲指定してソートしないと全列がソートされてしまうので注意。 ーー 上記のコード例のEnd(xlUp).Row はその列の十分下の方のセルを選択しておいて、ENDキーを押し、上矢印キーを押す操作なんです。これを知っておれば、マクロの記録を採れば、どういうコードになるか分かる。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 一例です。 Sub test() Dim i, j As Long For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row For j = 1 To 9 Step 4 With Cells(Rows.Count, 13).End(xlUp).Offset(1) .Value = Cells(i, j) .NumberFormatLocal = "m/d" .Offset(, 1) = Cells(i, j + 1) .Offset(, 2) = Cells(i, j + 2) End With Next j Next i Dim k As Long k = Cells(Rows.Count, 13).End(xlUp).Row Range(Cells(2, 13), Cells(k, 15)).Sort Key1:=Cells(i, 13), order1:=xlAscending End Sub こんな感じですかね?m(__)m

mgjp7
質問者

補足

ご指導ありがとうございます。 なにぶん初心者なもので・・・ マクロの各行がどのような処理なのか???? 可能であれば各行でコメント解説いただければありがたいのですが。 よろしくお願いいたします。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.1

この程度の作業なら、マクロを使わなくても一般機能だけで簡単にデータの編集ができます。 例えば、A2セルからC100セル(実際のデータよりも大きめに選択するとよい)を選択して、Ctrl+Cでコピーし、M2セルを選択してCtrl+Vで貼り付けます。 同様にD2セルからF100セルを選択してコピーし、M101セルを選択して貼り付け、さらにG2セルからJ100セルを選択してコピーし、M201セルを選択して貼り付けます。 最後にM1セルからO300セルを選択して「データ」並べ替え」でA列を基準に昇順で並べ替えれば完成です。 この操作を「新しいマクロの記録」で実行すれば、マクロでご希望の操作を実行することができます。 #エクセルのバージョンによって操作法や使用できる機能や関数が異なりますので、質問の際には必ずバージョンを明記するようにしましょう。

関連するQ&A