こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセル のマクロで 複数の表を1つにまとめたい

エクセル のマクロで 複数の表を1つにまとめたい
下記のようなシートがあります。
Sheet1
A B C E F G I J K
1 日付  品名 数 日付  品名 数 日付  品名 数
2 1/1  みかん 100 1/2 りんご 50 1/1 バナナ 30
3 1/5  みかん 50 1/6 りんご 25 1/7 バナナ 20
4 1/10 みかん 30 1/11 りんご15 1/10 バナナ 10
5 1/12 りんご30 1/11 バナナ 10
6 1/13 りんご50

みかん・りんご・バナナのそれぞれの表をマクロで下記のような1つの表ににまとめたいのですが
どのようにしたら良いかご教授お願いいたします。
(初心者なので可能であればマクロ内で’コメント付きで解説いただけると助かります)

 M N O
1 日付品名数
2 1/1みかん100
3 1/1バナナ30
4 1/5みかん50
5 1/6りんご25
6 1/7バナナ20
7 1/10みかん30
8 1/10バナナ10
9 1/11りんご15
10 1/11バナナ10
11 1/12りんご30
12 1/13りんご50


うまく説明できないのでイメージ画像を添付いたします。

投稿日時 - 2010-10-21 17:38:07

QNo.6265728

すぐに回答ほしいです

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

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

投稿日時 - 2010-10-22 09:18:36

お礼

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

投稿日時 - 2010-10-23 00:52:34

ANo.3

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(4)

ANo.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キーを押し、上矢印キーを押す操作なんです。これを知っておれば、マクロの記録を採れば、どういうコードになるか分かる。

投稿日時 - 2010-10-24 21:58:34

ANo.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

投稿日時 - 2010-10-21 23:25:40

補足

ご指導ありがとうございます。

なにぶん初心者なもので・・・
マクロの各行がどのような処理なのか????

可能であれば各行でコメント解説いただければありがたいのですが。

よろしくお願いいたします。

投稿日時 - 2010-10-22 01:20:28

ANo.1

この程度の作業なら、マクロを使わなくても一般機能だけで簡単にデータの編集ができます。

例えば、A2セルからC100セル(実際のデータよりも大きめに選択するとよい)を選択して、Ctrl+Cでコピーし、M2セルを選択してCtrl+Vで貼り付けます。

同様にD2セルからF100セルを選択してコピーし、M101セルを選択して貼り付け、さらにG2セルからJ100セルを選択してコピーし、M201セルを選択して貼り付けます。

最後にM1セルからO300セルを選択して「データ」並べ替え」でA列を基準に昇順で並べ替えれば完成です。

この操作を「新しいマクロの記録」で実行すれば、マクロでご希望の操作を実行することができます。

#エクセルのバージョンによって操作法や使用できる機能や関数が異なりますので、質問の際には必ずバージョンを明記するようにしましょう。

投稿日時 - 2010-10-21 17:55:48

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-