Vba 移动范围复制粘贴

Vba 移动范围复制粘贴,vba,range,copy-paste,Vba,Range,Copy Paste,我有一个24小时的需求(行)乘以365天(列)的数据集,我需要将其转换为一个连续的垂直数据系列。换句话说,创建一个宏,复制第二天的数据,并将其粘贴到第一天的下方,依此类推,直到一年的余额 我从Manji那里找到了一个相关的答案(我想…),但我没有足够的经验来适应我需要的代码。有人能给我指一下正确的方向吗 以下是我所看到的: Sub Macro1() ' ' Macro1 Macro ' ' Dim oRange As range Dim startColumn As String Dim ra

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

我认为这样做可能会有所帮助:

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键(重要提示:不要右键单击并复制)。然后,转到要放置数据的区域。(注意:不应与复制数据的位置相同)
现在右键单击单元格,然后按“过去特殊…”。激活
转置
并单击
确定
。数据现在应该已经准备好了。

您能提供示例工作表的屏幕截图,它现在看起来是什么样子,并告诉我们您希望它看起来是什么样子。。。解释你的代码是做什么的,它在哪里抛出错误或失败谢谢你们的回复,很抱歉我一直处于脱机状态。我的vba不够强大,无法确定如何修改数据集的代码。但我确实想出了如何使用偏移函数实现同样的功能。我只需要为日期创建一个索引,这样它就可以为每一天计算一个新列,为每一小时计算一个新行。一旦我这么做了,补偿就像一个符咒。谢谢大家的回复。