我正在寻找可以复制和粘贴单元格的marcro。
单元格X的值必须复制到单元格X + 6。 因此必须将A1文本“ Xteam”复制到单元格A7,直到单元格A380。 B2 + 6单元格也是如此。
它必须是动态的,因此单元格和序列是动态的。 我希望能够自己指出它是哪个单元格以及序列..
我该怎么做
我有这个,但不能按我想要的方式工作:
Sub sequence()
Const Nxt As Long = 7
Dim A As Variant, B As Variant, V As Variant, N As Long
A = Range("A1").Value
B = Range("B2").Value
ReDim V(Nxt To 380, 1 To 2)
For N = Nxt To 380
If N Mod 6 = 1 Then
V(N, 1) = A
V(N + 1, 2) = B
End If
Next N
Application.ScreenUpdating = False
Range("A" & Nxt, "B380").Value = V
Application.ScreenUpdating = True
End Sub
先谢谢你 埃玛尔
答案 0 :(得分:1)
好吧,这是基于以下假设:您要指定要在表格中复制A1
和B2
的次数。因此,您的循环相当混乱,而不是使用MOD,因为您知道每隔6个空格就需要它,并且对其他单元格不做任何操作,因此将索引乘以6会更容易。这也有助于您更轻松地确定传输阵列的尺寸,因为您要指定要复制多少次。
还值得注意的是,您Application.screenupdating = False
的位置不正确。您想要加速的真实位置是在循环期间。因此,如果要包括它,我会将其放在代码的顶部,但这不是很耗资源,因此我将其省略。
通常,dim Constants
有助于提高代码的可读性,但是在这种情况下,似乎并没有增加任何清晰度。一个可能有帮助的示例是您更改单元格的颜色并使用颜色索引。 Constant Red as long = 3
使它更容易理解,而constant Nxt as long = 7
并没有增加太多。
我选择使用两个列向量,而不是同时处理A
和B
的二维数组,因为它们使交错更容易粘贴,并且简化了数学,因为您不需要在交错行上放置项目。
最后,我对此的主张还不够,但是 请,请 请使用一目了然的名称。尽管在这种情况下可能并没有太大的区别,但是如果您要进行更复杂的项目,人们可能会看它,并且不得不怀疑V
的用途。这也使人们可以更轻松地为您提供帮助,因为他们不必坐下来就想知道每个变量的含义。
我还指定了它要查看的工作表,因此当前它仅会查看索引1指示的第一张工作表。请确保进行更改,以便它更改正确的工作表。
希望这对您有所帮助,并欢迎您使用Stack Overflow。
Option Explicit
Sub sequence()
Dim A As Variant
Dim B As Variant
Dim N As Long
Dim ArrA() As Variant
Dim ArrB() As Variant
Dim NumCopies As Long
A = Range("A1").Value
B = Range("B2").Value
NumCopies = 100
ReDim Preserve ArrA(1 To NumCopies * 6, 1 To 1)
ReDim Preserve ArrB(1 To NumCopies * 6, 1 To 1)
For N = 1 To NumCopies
ArrA(N * 6, 1) = A
ArrB(N * 6, 1) = B
Next N
Worksheets(1).Range("A2:A" & 1 + NumCopies * 6).Value = ArrA
Worksheets(1).Range("B3:B" & 2 + NumCopies * 6).Value = ArrB
End Sub