重复宏

时间:2018-10-18 20:29:35

标签: excel vba

我正在寻找可以复制和粘贴单元格的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

先谢谢你 埃玛尔

1 个答案:

答案 0 :(得分:1)

好吧,这是基于以下假设:您要指定要在表格中复制A1B2的次数。因此,您的循环相当混乱,而不是使用MOD,因为您知道每隔6个空格就需要它,并且对其他单元格不做任何操作,因此将索引乘以6会更容易。这也有助于您更轻松地确定传输阵列的尺寸,因为您要指定要复制多少次。

还值得注意的是,您Application.screenupdating = False的位置不正确。您想要加速的真实位置是在循环期间。因此,如果要包括它,我会将其放在代码的顶部,但这不是很耗资源,因此我将其省略。

通常,dim Constants有助于提高代码的可读性,但是在这种情况下,似乎并没有增加任何清晰度。一个可能有帮助的示例是您更改单元格的颜色并使用颜色索引。 Constant Red as long = 3使它更容易理解,而constant Nxt as long = 7并没有增加太多。

我选择使用两个列向量,而不是同时处理AB的二维数组,因为它们使交错更容易粘贴,并且简化了数学,因为您不需要在交错行上放置项目。

最后,我对此的主张还不够,但是 请,请 请使用一目了然的名称。尽管在这种情况下可能并没有太大的区别,但是如果您要进行更复杂的项目,人们可能会看它,并且不得不怀疑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