VBA Excel复制与编辑;重复粘贴多个值
我在VBA excel中遇到多个值的问题,我想复制并粘贴到另一个工作簿(或另一个工作表,但不一定在本主题中) 重点是,我得到了D列和E列,它们的值范围从第1行到第366行(D1:D366和E1:E366),我必须在单元格A5(D列)和B5(E列)中切换它们。这很简单。但是,当我添加另一个复制和粘贴值的命令时,复制的单元格范围保持不变,粘贴数据的单元格范围发生变化(每一步增加30个值),我不知道如何使此过程更快。 我已经做了5个可重复的组合,但我还需要另外361个 是否有更方便的代码用于此操作 我的代码可以在这里找到:VBA Excel复制与编辑;重复粘贴多个值,excel,vba,copy,paste,Excel,Vba,Copy,Paste,我在VBA excel中遇到多个值的问题,我想复制并粘贴到另一个工作簿(或另一个工作表,但不一定在本主题中) 重点是,我得到了D列和E列,它们的值范围从第1行到第366行(D1:D366和E1:E366),我必须在单元格A5(D列)和B5(E列)中切换它们。这很简单。但是,当我添加另一个复制和粘贴值的命令时,复制的单元格范围保持不变,粘贴数据的单元格范围发生变化(每一步增加30个值),我不知道如何使此过程更快。 我已经做了5个可重复的组合,但我还需要另外361个 是否有更方便的代码用于此操作 我
Sub jan01()
Range("A5") = ("=D1")
Range("B5") = ("=E1")
Sheets("11_POLAND").Range("AJ60:BY86").Copy
Sheets("13").Range("A1:AP27").PasteSpecial xlPasteValues
End Sub
Sub jan02()
Range("A5") = ("=D2")
Range("B5") = ("=E2")
Sheets("11_POLAND").Range("AJ60:BY86").Copy
Sheets("13").Range("A31:AP57").PasteSpecial xlPasteValues
End Sub
Sub jan03()
Range("A5") = ("=D3")
Range("B5") = ("=E3")
Sheets("11_POLAND").Range("AJ60:BY86").Copy
Sheets("13").Range("A61:AP87").PasteSpecial xlPasteValues
End Sub
Sub jan04()
Range("A5") = ("=D4")
Range("B5") = ("=E4")
Sheets("11_POLAND").Range("AJ60:BY86").Copy
Sheets("13").Range("A91:AP117").PasteSpecial xlPasteValues
End Sub
Sub jan05()
Range("A5") = ("=D5")
Range("B5") = ("=E5")
Sheets("11_POLAND").Range("AJ60:BY86").Copy
Sheets("13").Range("A121:AP147").PasteSpecial xlPasteValues
End Sub
根据上述说明,单元格A5和B5的值会逐一改变。
对于每个简单情况,表13的范围每30个单元格向下增加一次。最终,我希望将所有数据一个接一个地复制,而不会像附加的图像中那样重叠(缩小以显示一般用途)。
在此处输入图像描述
为了将所有这些放在一起,我使用了一个宏:
Sub january()
Call jan01
Call jan02
Call jan03
Call jan04
Call jan05
End Sub
不管怎么说,这项工作看起来很乏味,我相信,这是一个更快的解决方案?
有人有过这样的问题吗
谢谢你我不能100%确定我是否遵循了你在这里试图实现的目标,但我写的这篇文章似乎与你现有的代码一样,只是在一个例程中,而不是在六个例程中:
Sub january()
Dim i As Integer
i = 1
While i < 6
Range("A5") = ("=D" + CStr(i))
Range("B5") = ("=E" + CStr(i))
Sheets("11_POLAND").Range("AJ60:BY86").Copy
Sheets("13").Range("A" + CStr(i + ((i - 1) * 30)) + ":AP" + CStr(i + ((i - 1) * 30) + 26)).PasteSpecial xlPasteValues
i = i + 1
Wend
End Sub
Sub-一月()
作为整数的Dim i
i=1
当我<6
范围(“A5”)=(“=D”+CStr(一))
范围(“B5”)=(“=E”+CStr(i))
图纸(“11_波兰”)。范围(“AJ60:BY86”)。副本
表格(“13”)。范围(“A”+CStr(i+((i-1)*30))+”:AP“+CStr(i+((i-1)*30)+26))。粘贴特殊值
i=i+1
温德
端接头
以此为起点,我想您可以将
I<6
更改为I<367
?这是使用For循环编写的代码。我仍然有我在上面提出的问题,并假设您正在使用哪张表。这与给出的答案类似,除了使用变量使读取代码更容易,以及使用偏移量(同样是为了便于读取代码)
选项显式
公共子复制范围()
Application.ScreenUpdating=False
将图纸从作为工作表,图纸到作为工作表,i等长
Set sheetFrom=此工作簿。工作表(“11_波兰”)
将Sheeto设置为=此工作簿。工作表(“13”)
尺寸范围:设置范围=图纸范围(“A5”)
尺寸范围:设置范围=板材范围(“B5”)
从
因为i=1到5'谢谢你们的帮助
我输入了以下代码:
Sub january()
Dim i As Integer
For i = 1 To 31
Sheets("1_GENERAL").Range("A5") = ("=D" + CStr(i))
Sheets("1_GENERAL").Range("B5") = ("=E" + CStr(i))
Sheets("11_POLAND").Range("AJ60:BY86").Copy
Sheets("13").Range("A" + CStr(i + ((i - 1) * 29)) + ":AP" + CStr(i + ((i - 1) * 29))).PasteSpecial xlPasteValues
Next i
End Sub
其中:
-“i”表示某一行。如果是1月,则从1日到31日(一年中的1-31日)
-“29”表示每个后续的顶行将被粘贴到大约29行下面。
-D列和E列包括限定到特定“i”值的值
我希望,这将有助于每个在VBA Excel中处理大数据的人。那么,这些单独的数据可以合并吗?或者有理由将它们分开吗?您好,Mariusz,欢迎使用堆栈溢出,我相信您可以使用循环
来执行这样的操作,例如。这可以简化您的代码,使其更易于阅读和操作。范围(“A5”)在表格(“11_波兰”)中吗?那么射程(“A5”)=(“=D1”)应该达到什么目标?是否只是范围(“A5”)=范围(“D1”)?或范围(“A5”)。公式=“=D1”?或者完全是别的?这些代码不能组合,因为D行和E行中的每个单元格都应该单独使用。我把范围D和E放在存在特定值的地方,以计算进一步的值。太好了!谢谢它起作用了。然而,我想为这366个值设定12个单独的间隔(月)。在这种情况下,如果我在I>32和I时添加,您建议的更改实际上不会起作用,因为它将以I=1
开始,请查看I
不在33和59之间,然后跳过整个循环。实际上,我不确定你所说的12个独立间隔是什么意思;你是说你希望每个月都复制到不同的工作表、不同的区域或完全不同的地方吗?是的。我想将这366个单独的值除以12个月(每单位30-31个值),然后将结果复制到另一个工作表中。很好,我打算尝试将每个月循环的解决方案组合在一起,但这似乎是一个合理的解决方案,所以我将不必理会。很高兴你下了决心。
Sub january()
Dim i As Integer
For i = 1 To 31
Sheets("1_GENERAL").Range("A5") = ("=D" + CStr(i))
Sheets("1_GENERAL").Range("B5") = ("=E" + CStr(i))
Sheets("11_POLAND").Range("AJ60:BY86").Copy
Sheets("13").Range("A" + CStr(i + ((i - 1) * 29)) + ":AP" + CStr(i + ((i - 1) * 29))).PasteSpecial xlPasteValues
Next i
End Sub