Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 重复宏_Excel_Vba - Fatal编程技术网

Excel 重复宏

Excel 重复宏,excel,vba,Excel,Vba,我正在寻找一个马尔克罗,可以复制和粘贴细胞 单元格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 =

我正在寻找一个马尔克罗,可以复制和粘贴细胞

单元格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
先谢谢你
elmalle

好吧,这是基于这样的假设,即您希望指定要将
A1
B2
复制到工作表中的次数。所以你的循环是相当混乱的,而不是使用MOD,因为你知道你想要它每6个空格一次,你没有对其他的单元格做任何事情,只需要将数字乘以6就可以更容易地建立索引。这还可以帮助您更轻松地计算传输数组的维度,因为您需要指定要复制的次数

还值得注意的是,您的
Application.screenUpdatement=False
位置不正确。你真正想要加速的地方是在循环过程中。因此,如果要包含它,我会将其放在代码顶部附近,但这不是非常需要资源,所以我将其忽略

通常,如果有助于代码的易读性,将常量变暗是很好的,但在这种情况下,它似乎没有增加任何清晰度。例如,您正在更改单元格的颜色并使用颜色索引<代码>长=3时的常量红色使其更容易理解,而
长=7时的常量Nxt不会增加太多内容

与同时处理
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

最大复制次数是什么意思?你不是只想要A7-A380吗?是的,这是目前最好的。。很抱歉,我这样做了,所以你必须在代码中指定你想要的重复次数,但是如果你想让它以380结束,那么它大约有63次重复,所以只要编辑那一行,它就应该按照你的意愿工作