此方法利用循环和数组来传输数据。这不是最动态的方法,但它可以完成工作。所有循环都使用现有常量,因此如果您的数据集发生更改,您可以调整常量,它应该可以正常运行。确保调整工作表名称以匹配您在 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 格式存储数据的数组。