我有一个24小时的需求(行)到365天(列)的数据集,我需要将其转换为一个连续的垂直数据系列。换句话说,创建一个复制第二天数据的宏,并将其粘贴到第一天的数据之下,依此类推,直到今年的余额为止。
我发现Manji的答案是相关的(我认为......)但是我没有足够的经验使这段代码适应我的需要。有人可以指点我正确的方向吗?
以下是我正在看的内容:
Sub Macro1()
'
' Macro1 Macro
'
'
Dim oRange As range
Dim startColumn As String
Dim rangestart As Integer
Dim rangeEnd As Integer
Dim cellcount As Integer
Dim i As Integer
startColumn = "A"
rangestart = 1
rangeEnd = 24
cellcount = rangeEnd - rangestart + 1
For i = 1 To cellcount - 1
Set oRange = ActiveSheet.range(startColumn & rangestart & ":" & startColumn & (rangeEnd - i))
oRange.Copy
oRange.Offset(i, i).PasteSpecial xlPasteAll
Set oRange = ActiveSheet.range(startColumn & (rangeEnd - i + 1) & ":" & startColumn & rangeEnd)
oRange.Copy
oRange.Offset((-1 * cellcount) + i, i).PasteSpecial xlPasteAll
Next i
End Sub
答案 0 :(得分:0)
我认为这样的事情可能有所帮助:
Sub DayHour()
Dim r As Long, c As Long, startRow As Long, hoursColumn As Long
Dim daysRow As Long, i As Long, j As Long
daysRow = 1 ' this is the row where 'day 1', 'day 2' (or similar) is written
hoursColumn = 1 ' this is the column where 'hour 1', 'hour 2' (or similar) is written
r = Cells(Rows.Count, hoursColumn).End(xlUp).Row
c = Cells(daysRow, Columns.Count).End(xlToLeft).Column
For i = daysRow To r
For j = hoursColumn To c
With Sheets(2)
.Cells(j, i) = Cells(i, j)
End With
Next j
Next i
End Sub
它在excel文件的表2中写入重新排列的值。我认为这或多或少都是你所需要的。如果您不理解某些内容或者这不是您想要的内容,请发表评论。
小记:在大多数情况下,复制和粘贴在VBA中不是一个好的解决方案。
编辑:我想到了其他一些事情。 您不必在VBA中执行此操作。 Excel具有内置功能。 以下是解释:
选择所有数据,然后按Ctrl+C
(重要:不要右键单击并复制)。然后,您转到要放置数据的区域。 (注意:不应该与复制数据的位置相同)
现在右键单击单元格并按Past Special..
。激活Transpose
,然后点击Ok
。数据现在应该就绪。