0

我有一个 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
4

1 回答 1

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。数据现在应该到位。

于 2013-06-18T07:30:18.857 回答