この方法では、ループと配列を利用してデータを転送します。これは最も動的な方法ではありませんが、仕事は完了します。すべてのループは既存の定数を使用するため、データ セットが変更された場合は定数を調整でき、正常に実行されるはずです。ワークシート名は、Excel ドキュメントで使用している名前と一致するように調整してください。実際には、これはデータを配列にロードし、それを別のワークシートに転置することです。
データ セットのサイズが大幅に変化する場合は、ループ変数と配列サイズの宣言を調整するためのロジックを含める必要があります。その場合はお知らせください。その方法を見つけて、編集を投稿します。
Sub moveTimeData()
Set source = ThisWorkbook.Sheets("RawData")
Set dest = ThisWorkbook.Sheets("TransposeSheet")
Const dataSetSize = 15
Const row15Start = 3
Const row15End = 18
Const row30Start = 21
Const row30End = 36
Const colStart = 2
Const destColStart = 2
Const dest15RowStart = 2
Const dest30RowStart = 3
Dim time15Array() As Integer
Dim time30Array() As Integer
ReDim time15Array(0 To dataSetSize)
ReDim time30Array(0 To dataSetSize)
Dim X As Integer
Dim Y As Integer
Dim c As Integer
c = 0
For X = row15Start To row15End
time15Array(c) = source.Cells(X, colStart).Value
c = c + 1
Next X
c = 0
For X = row30Start To row30End
time30Array(c) = source.Cells(X, colStart).Value
c = c + 1
Next X
For X = 0 To dataSetSize
dest.Cells(dest15RowStart, X + destColStart).Value = time15Array(X)
Next X
For X = 0 To dataSetSize
dest.Cells(dest30RowStart, X + destColStart).Value = time30Array(X)
Next X
End Sub
編集->編集を読んだ後、これがあなたが探しているものだと思います
Sub moveTimeData()
Set source = ThisWorkbook.Sheets("RawData")
Set dest = ThisWorkbook.Sheets("TransposeSheet")
Const numberDataGroups = 4
Const dataSetSize = 15
Const stepSize = 18
Const sourceRowStart = 3
Const sourceColStart = 2
Const destColStart = 2
Const destRowStart = 2
Dim X As Integer
Dim Y As Integer
Dim currentRow As Integer
currentRow = destRowStart
For X = 0 To numberDataGroups
For Y = 0 To dataSetSize
dest.Cells(currentRow, Y + destColStart).Value = source.Cells((X * stepSize) + (Y + sourceRowStart), sourceColStart)
Next Y
currentRow = currentRow + 1
Next X
End Sub
この作業の鍵は、データ ダンプ後に処理するデータ グループの数を知ることです。それを検出するためのロジックを含めるか、numberDataGroups という定数を調整して、グループの数を反映させる必要があります。注: データが Row Major 形式で格納されている配列をトラバースするために、同様の手法を利用しました。