是否有可能只有一行VBA脚本重复“N”次?

我正在第一次尝试recursion。 在这个问题中,我有一个包含许多行的巨大数据集,并且在每一行中都有N个要复制的4个单元格范围(从列O到列GB)。 我写了下面的函数:

Function Recursive(Rng As Range) If N = 1 Then Rng.Offset(, -3).Resize(, 670).Copy Rng.Offset(1, -3).Insert Shift:=xlDown Rng.Offset(, 6).Resize(, 4).Copy Rng.PasteSpecial Paste:=xlPasteValues Else Rng.Offset(, -2).Resize(, 670).Copy Rng.Offset(1, -2).Insert Shift:=xlDown 'Repeat these two lines N times' Rng.Offset(, 7 + 4 * N).Resize(, 3).Copy Rng.Offset(N, 0).PasteSpecial Paste:=xlPasteValues Recursive (N - 1) End If N = 0 End Function 

我知道这是相当粗糙的,我已经看到一些问题。 基本上,如果N等于4,那么我希望Else指令的前两行重复4次,然后继续执行接下来的三行,直到N等于1.基本上,在那里是很多范围穿过数据集,我想要创build一个新的行,把他们进入,包括在左边的单元格。 是否有可能在我发表评论的地方写上“说回去重复这两行?”

为了详细说明@ MarcB的评论,有许多types的循环。 我select了一个主循环,将N减1,直到N = 0。在那个循环中,如果N = 1,那么你的特殊的N = 1代码运行; 否则,如果N = 4,则在该代码段循环4次,否则运行你的'else'代码块。

 Function Recursive(Rng As Range) Dim OriginalN as Integer OriginalN = N While N <> 0 If N = 1 Then Rng.Offset(, -3).Resize(, 670).Copy Rng.Offset(1, -3).Insert Shift:=xlDown Rng.Offset(, 6).Resize(, 4).Copy Rng.PasteSpecial Paste:=xlPasteValues ElseIf N = OriginalN Then For x = 1 To OriginalN Rng.Offset(, -2).Resize(, 670).Copy Rng.Offset(1, -2).Insert Shift:=xlDown 'Repeat these two lines N times' Next x Else Rng.Offset(, 7 + 4 * N).Resize(, 3).Copy Rng.Offset(N, 0).PasteSpecial Paste:=xlPasteValues Recursive (N - 1) End If N = N - 1 Wend End Function 

您可以参考“回去”和重做代码,但是如果有其他方法可用,使用GoTo语句通常被认为是马虎,因为如果没有适当的注意,GoTo语句可能会错误地/不确定地运行,并且有些难于阅读。