- ベストアンサー
VBAエクセルで複雑な行列入れ替えを実現する方法
- VBAを使用して、エクセルの複雑な行列入れ替えを行いたいです。元のデータは1000行の行列で、別のシートに行列を入れ替えたいです。
- この質問では、VBAとエクセルを使用して、行列の入れ替えを行いたいです。元のデータは1000行の行列で、入れ替え後の行列を別のシートに配置したいです。
- VBAとエクセルを使って、1000行の行列の入れ替えを行いたいです。入れ替え後の行列は別のシートに配置されます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ルールぐらい1言、文章化して質問するものだ。回答者に時間をかけたり推測させないこと。 ーー これはCSVファイルなどなら、 ロジックとしては (1)「貯め込み」を行うか。(配列などに) (2)何度もくり返し読むか しか無いだろう。 しかしエクセルのシートの場合は、シートのセルのデータを、(読むセルも書き出すセルも)ランダムアクセスできるから、入出力でそう苦労することはない。(ディスクの読み書きが起こらない。(読んだレコード(=行)が消えない) ーー Sheet1が元データ、Sheet2がアウトプット(結果作成)のシートとする。 繰り返し最後まで行を読む。 1行読んだら、A,B列をSheet2に1行目に、 CD列をSheet2の2行目に E,F列をSheet2の3行目に 以下同様 を行う。 次はセットする列が2列づれる。 第2行目を読むとA,B列はSheet2のC,D列で上から下へセットしていく ーー Sheet1元データ A-H列 X11 Y11 X12 Y12 X13 Y13 X14 Y14 X21 Y21 X22 Y22 X23 Y23 X24 Y24 X31 Y31 X32 Y32 X33 Y33 X34 Y34 X41 Y41 X42 Y42 X43 Y43 X44 Y44 X51 Y51 X52 Y52 X53 Y53 X55 Y55 Sheet2 結果 A-J列 X11 Y11 X21 Y21 X31 Y31 X41 Y41 X51 Y51 X12 Y12 X22 Y22 X32 Y32 X42 Y42 X52 Y52 X13 Y13 X23 Y23 X33 Y33 X43 Y43 X53 Y53 X14 Y14 X24 Y24 X34 Y34 X44 Y44 X55 Y55 コード 標準モジュールに Sub test01() Dim sh1, sh2 As Worksheet Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") d = sh1.Range("A65536").End(xlUp).Row r = sh1.Range("iv1").End(xlToLeft).Column 'MsgBox d 'MsgBox r l = 1 For i = 1 To d k = 1 For j = 1 To r Step 2 sh2.Cells(k, l) = sh1.Cells(i, j) sh2.Cells(k, l + 1) = sh1.Cells(i, j + 1) k = k + 1 Next j l = l + 2 Next i End Sub ーー 上記での、k、l の入れる場所が、こういう課題に、慣れないと、難しいと思う。 、
その他の回答 (1)
- mitarashi
- ベストアンサー率59% (574/965)
数式でやるなら、データがSheet1にあるとして、Sheet2のA1から、 =INDEX(Sheet1!$A$1:$F$1000,INT((COLUMN()+1)/2),ROW()*2-MOD(COLUMN(),2)) でどうでしょうか。(右方、下方に複写) $A$1:$F$1000のところは実際に合わせて変更して下さい。 VBAコードでやるにしても、同様のロジックで可能と思います。 ご参考まで。
お礼
なるほど、数式でもこうすれば出来るんですね。 つい、vbaで…と考えてしまいましたが、参考になります。 参考例、ありがとうございました。
お礼
質問への投稿方法、大変失礼しました。 また回答例ありがとうございました。 すばらしいです。 本当にありがとうございました!!
補足
質問方法失礼しました。 確かに、元のデータはcsvで最終的にはエクセルでデータの整理をしたくて… ですが、csvファイルを開く時に配列で貯め込んで…ってすればそれでも良かったんですね。 こちらは勉強がてら、やってみようと思います。