首页 > 解决方案 > 重复宏

问题描述

我正在寻找可以复制和粘贴单元格的宏。

单元格 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

提前谢谢你

标签: excelvba

解决方案


好的,这是假设您要指定要复制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

推荐阅读