ANo.2です。構造が良く分からないので、汎用性をこころがけて、コードを書いてみました。XL2000のコードです。ご参考まで。
'm行×n行 → n行×m行に変換
'$F$1:$H$4 → $F$7:$I$9 に、秘密の行列変換の操作を記述(式で行う)
'1ブロック分を$F$1:$H$4にコピーし、変換された結果の$F$7:$I$9を出力先にペースト
'縦に並んだブロックを、別シートに横に並べる
'シートが2,3になっているのは、1を他で使っていたからで、他意はなし。
Sub test()
Dim sourceTopLeftCell As Range '元データの左上セル
Dim destTopLeftCell As Range '複写先の左上セル
Dim pasteTopLeftCell As Range '変換のため複写する先の左上セル
Dim copyTopLeftCell As Range '変換後のデータの左上セル
'4行×3列 → 3行×4列の例です
Const m As Long = 4
Const n As Long = 3
Set sourceTopLeftCell = Sheets(2).Range("a1")
Set destTopLeftCell = Sheets(3).Range("a1")
Set pasteTopLeftCell = Sheets(2).Range("f1")
Set copyTopLeftCell = Sheets(2).Range("f7")
Application.ScreenUpdating = False
Do Until sourceTopLeftCell.Value = ""
sourceTopLeftCell.Resize(m, n).Copy
pasteTopLeftCell.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
copyTopLeftCell.Resize(n, m).Copy
destTopLeftCell.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Set sourceTopLeftCell = sourceTopLeftCell.Offset(m, 0)
Set destTopLeftCell = destTopLeftCell.Offset(0, m)
Loop
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
お礼
真意がわからない質問を書いてしまい申し訳ありません。それなのに2度もご回答くださいましてありがとうございました。VBAを現在勉強中なので、参考にさせていただきまして最短で良い仕事になるよう頑張ります。