• ベストアンサー

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つの数値にしたいのです。つたない説明で大変申し訳ありませんが、どなたかわかる方お教えくださいませ。

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

  • ベストアンサー
  • nihonjinn
  • ベストアンサー率39% (79/200)
回答No.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

LIZATOMO
質問者

お礼

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

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

その他の回答 (4)

  • nihonjinn
  • ベストアンサー率39% (79/200)
回答No.4

マクロはこんな感じでどうでしょうか 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

LIZATOMO
質問者

お礼

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

すると、全ての回答が全文表示されます。
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

B1を選択した状態からマクロ自動記録を開始して、相対参照にして(記録停止ダイアログの、停止ボタンの右側にあるのがそうです)、コピー、形式を指定して貼り付けで、行列入れ替え貼り付け後、B5セルを選択。相対参照を切ってから、自動記録停止。 ここまでやった上で、記録された内容を呈示して、どうすれば、連続的に出来るのか質問されると、回答が付くかと思います。(あるいは、VBAのループ処理が理解できていれば、ご自分でお分かりになるでしょう)

LIZATOMO
質問者

お礼

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

すると、全ての回答が全文表示されます。
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

もちろん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) をそれぞれ貼り付けて、下方向にコピーしてください 求める形式の表になります 後は全体をコピーして「編集」→「形式を選択して貼り付け」→「値」で貼り付けてください

LIZATOMO
質問者

お礼

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

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

とりあえずマクロを使わない方法でやると F1に「=Sheet1!B1」 F2に「=Sheet1!C1」 F3に「=Sheet1!D1」 F4に「=Sheet1!E1」 と入れてF1~F4を選択してオートフィルでずっとコピーすれば再現できます

LIZATOMO
質問者

お礼

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

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

関連するQ&A

専門家に質問してみよう