- 締切済み
縦列 横列 をマクロで入れ替えろ行いたいのですが
エクセルで下記のような並び替えろ瞬時に行える方法はないでしょうか?できればマクロを組みたいのですが…マクロ初心者なのでいい方法を簡単に教えてください。 番号 日時(1) 日時(2) 日時(3) 日時(4) A N台 N台 N台 N台 B N台 N台 N台 N台 C N台 N台 N台 N台 このようなデータを A 日時(1) 台数 A 日時(2) 台数 A 日時(3) 台数 A 日時(4) 台数 B 日時(1) 台数 B 日時(2) 台数 B 日時(3) 台数 B 日時(4) 台数 縦列300~500データ 横列データの数は100~200データあり そのときによってさまざまです。 このように瞬時に並び替えろ行いたいです。 簡単にわかりやすく教えてください。 よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- ka_na_de
- ベストアンサー率56% (162/286)
一例です。 元のデータが Sheet1 にある前提で、 Sheet2 に結果を出力します。 データバックアップ後に、 標準モジュールに貼り付けて実行してください。 Sub test() Dim Ws1 As Worksheet Dim Ws2 As Worksheet Dim myLastRow As Long Dim myCol As Long Dim i As Long Dim j As Long Set Ws1 = Worksheets("Sheet1") '元シート Set Ws2 = Worksheets("Sheet2") '並び替え後 Application.ScreenUpdating = False Ws2.Cells.Clear j = 1 With Ws1 myLastRow = .Cells(.Rows.Count, "A").End(xlUp).Row For i = 2 To myLastRow myCol = .Cells(i, .Columns.Count).End(xlToLeft).Column - 1 Ws2.Cells(j, "A").Resize(myCol) = .Cells(i, "A").Value .Cells(1, "B").Resize(, myCol).Copy Ws2.Cells(j, "B").PasteSpecial Transpose:=True .Cells(i, "B").Resize(, myCol).Copy Ws2.Cells(j, "C").PasteSpecial Transpose:=True j = j + myCol Next i End With Application.CutCopyMode = False Application.ScreenUpdating = True Set Ws1 = Nothing Set Ws2 = Nothing End Sub
- D-Matsu
- ベストアンサー率45% (1080/2394)
行列入れ替えはPasteSpecialでできます。 http://www.moug.net/tech/exvba/0050104.htm 行数・列数はEndとRow,Columnの組み合わせでいいでしょう。 http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_030_100.html あとは繰り返し処理で終わり。 簡単とは言いませんが、それほど難しいことをする必要もないですからあとはご自身でどうぞ。
お礼
詳しい回答ありがとうございました。じっくり格闘してみます。