- ベストアンサー
EXCELの「行列を入れ替える」マクロについてどなたか教えていただけないでしょうか?
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つの数値にしたいのです。つたない説明で大変申し訳ありませんが、どなたかわかる方お教えくださいませ。
- みんなの回答 (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
その他の回答 (4)
- nihonjinn
- ベストアンサー率39% (79/200)
マクロはこんな感じでどうでしょうか 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
お礼
このマクロでもできました。優秀なマクロをありがとうございます。
- mitarashi
- ベストアンサー率59% (574/965)
B1を選択した状態からマクロ自動記録を開始して、相対参照にして(記録停止ダイアログの、停止ボタンの右側にあるのがそうです)、コピー、形式を指定して貼り付けで、行列入れ替え貼り付け後、B5セルを選択。相対参照を切ってから、自動記録停止。 ここまでやった上で、記録された内容を呈示して、どうすれば、連続的に出来るのか質問されると、回答が付くかと思います。(あるいは、VBAのループ処理が理解できていれば、ご自分でお分かりになるでしょう)
お礼
ご親切なご回答大変に感謝いたします^^ありがとうございます。
- zap35
- ベストアンサー率44% (1383/3079)
もちろん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) をそれぞれ貼り付けて、下方向にコピーしてください 求める形式の表になります 後は全体をコピーして「編集」→「形式を選択して貼り付け」→「値」で貼り付けてください
お礼
ご回答大変にありがとうございます。試しましたが、これでもできました^^1つの事項に様々なアプローチがあるものなのですね^^大変に参考になりました。
- nihonjinn
- ベストアンサー率39% (79/200)
とりあえずマクロを使わない方法でやると F1に「=Sheet1!B1」 F2に「=Sheet1!C1」 F3に「=Sheet1!D1」 F4に「=Sheet1!E1」 と入れてF1~F4を選択してオートフィルでずっとコピーすれば再現できます
お礼
ありがとうございます。最短でもっともやりやすい方法です^^
お礼
ありがとうございます。このマクロでできました。思い描いていた結果です。ほんとうにありがとうございます。