プロが教える店舗&オフィスのセキュリティ対策術

EXCELの「行列を入れ替える」マクロについてどなたか教えていただけないでしょうか?
下記のようにならんだDATAがあります。
  A列   B列  C列  D列  E列
(1行)2002/12/17 15240 15280 15220 15220
(2行)
(3行)
(4行)
(5行)2002/12/18 15250 15250 15210 15210
(6行)
(7行)
(8行)
(9行)2002/12/19 15220 15310 15220 15310
(10行)
(11行)
(12行)
(13行)2002/12/20 15220 15260 15210 15230
(14行)
(15行)
(16行)
(17行)2002/12/24 15300 15310 15270 15310
(18行)
(19行)
(20行)
(21行)2002/12/25 15300 15340 15300 15600  . . . . . . . . . . . . . . . . . . . . . . .
と,このようにDATAは日付の横に数値が4つずつ横に並んでおりますが、この4つの数値をその4つ目の数値の真横のF列から縦に4つ並べたいのですが、一気にできるマクロがないものでしょうか?下記のようにです。
  A列   B列 C列 D列 E列  F列
2002/12/17            15240
                 15280
                 15220
                 15220
2002/12/18            15250
                 15250
                 15210
                 15210
2002/12/19            15220
15310
15220
15310
                  .
.
.
                  
といった感じに一気にマクロで処理してしまいたいのです。DATAはかなりの行数あり、すべて3行の間隔があります。日付の横に4つの数値が規則的に並んでいるというものです。何回でもマクロボタン一発で4つの横に並んだ数値のみを縦に並べた4つの数値にしたいのです。つたない説明で大変申し訳ありませんが、どなたかわかる方お教えくださいませ。

A 回答 (5件)

短くします


Sub test()
Dim LastRow, Trow, i As Long
LastRow = Range("A65536").End(xlUp).Row + 3
For i = 1 To Int(LastRow / 4)
Trow = i * 4 - 3
Cells(Trow, 6) = Cells(Trow, 2)
Cells(Trow + 1, 6) = Cells(Trow, 3)
Cells(Trow + 2, 6) = Cells(Trow, 4)
Cells(Trow + 3, 6) = Cells(Trow, 5)
Next
Range(Cells(1, 2), Cells(LastRow, 5)).Clear
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。このマクロでできました。思い描いていた結果です。ほんとうにありがとうございます。

お礼日時:2008/06/15 00:10

マクロはこんな感じでどうでしょうか



Sub test()
Dim LastRow, Trow, i As Long
LastRow = Range("A65536").End(xlUp).Row + 3
For i = 1 To Int(LastRow / 4)
Trow = i * 4 - 3
Cells(Trow, 6) = Cells(Trow, 2)
Cells(Trow + 1, 6) = Cells(Trow, 3)
Cells(Trow + 2, 6) = Cells(Trow, 4)
Cells(Trow + 3, 6) = Cells(Trow, 5)
Cells(Trow, 2).ClearContents
Cells(Trow, 3).ClearContents
Cells(Trow, 4).ClearContents
Cells(Trow, 5).ClearContents
Next
End Sub
    • good
    • 0
この回答へのお礼

このマクロでもできました。優秀なマクロをありがとうございます。

お礼日時:2008/06/15 00:12

B1を選択した状態からマクロ自動記録を開始して、相対参照にして(記録停止ダイアログの、停止ボタンの右側にあるのがそうです)、コピー、形式を指定して貼り付けで、行列入れ替え貼り付け後、B5セルを選択。

相対参照を切ってから、自動記録停止。
ここまでやった上で、記録された内容を呈示して、どうすれば、連続的に出来るのか質問されると、回答が付くかと思います。(あるいは、VBAのループ処理が理解できていれば、ご自分でお分かりになるでしょう)
    • good
    • 0
この回答へのお礼

ご親切なご回答大変に感謝いたします^^ありがとうございます。

お礼日時:2008/06/15 00:13

もちろんVBAでもできるのですが、関数でもできます。


元のデータがSheet1にあるとして、別シートのA1に
=IF(MOD(ROW(),4)=1,OFFSET(Sheet1!$A$1,INT((ROW()-1)/4)*4,0),"")

F1に
=OFFSET(Sheet1!$A$1,INT((ROW()-1)/4)*4,MOD(ROW()-1,4)+1)
をそれぞれ貼り付けて、下方向にコピーしてください
求める形式の表になります

後は全体をコピーして「編集」→「形式を選択して貼り付け」→「値」で貼り付けてください
    • good
    • 0
この回答へのお礼

ご回答大変にありがとうございます。試しましたが、これでもできました^^1つの事項に様々なアプローチがあるものなのですね^^大変に参考になりました。

お礼日時:2008/06/15 00:15

とりあえずマクロを使わない方法でやると


F1に「=Sheet1!B1」
F2に「=Sheet1!C1」
F3に「=Sheet1!D1」
F4に「=Sheet1!E1」
と入れてF1~F4を選択してオートフィルでずっとコピーすれば再現できます
    • good
    • 0
この回答へのお礼

ありがとうございます。最短でもっともやりやすい方法です^^

お礼日時:2008/06/15 00:01

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