移动范围复制粘贴

时间:2013-06-17 20:36:42

标签: vba range copy-paste

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

1 个答案:

答案 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。数据现在应该就绪。