Vba 如何在循环宏中重新启动数组行计数

Vba 如何在循环宏中重新启动数组行计数,vba,excel,Vba,Excel,我试图弄清楚如何在每次do循环宏重新启动时重新启动小数组函数中的行计数。第一个宏沿电子表格向下复制一系列公式,直到满足条件。然后,一旦满足条件,第二个宏将重新开始并重新键入公式 这是我为数组公式编写的VBA宏: ActiveCell.Offset(0, 2).Range("A1").Select Selection.FormulaArray = _ "=SMALL(IF(Pivot!C3=R[7]C[-2],ROW(Pivot!C3),""""),ROW(R[-7]))" ActiveC

我试图弄清楚如何在每次do循环宏重新启动时重新启动小数组函数中的行计数。第一个宏沿电子表格向下复制一系列公式,直到满足条件。然后,一旦满足条件,第二个宏将重新开始并重新键入公式

这是我为数组公式编写的VBA宏:

ActiveCell.Offset(0, 2).Range("A1").Select
Selection.FormulaArray = _
    "=SMALL(IF(Pivot!C3=R[7]C[-2],ROW(Pivot!C3),""""),ROW(R[-7]))"
ActiveCell.Offset(0, 2).Range("A1").Select 
以下是显示为宏循环的公式

第一行:

=SMALL(IF(Pivot!$C:$C=H8,ROW(Pivot!$C:$C),""),ROW(1:1))
然后在宏重新启动循环的第六行中,出现以下公式:

=SMALL(IF(Pivot!$C:$C=H13,ROW(Pivot!$C:$C),""),ROW(6:6))
我需要将公式更改回
行(1:1)

这是整个嵌套循环

 Do
 ActiveCell.FormulaR1C1 = _
    "=IF(ISERROR(VLOOKUP(RC[-3],Matrix!R10C1:R1048576C14,13,0)),"""",VLOOKUP(RC[-3],Matrix!R10C1:R1048576C14,13,0))"
ActiveCell.Offset(0, 2).Range("A1").Select
ActiveCell.FormulaR1C1 = _
    "=IF(RC[-2]="""","""",IF(ISERROR(VLOOKUP(RC[2],'GBS Data'!R8C5:R1046427C17,2,0)),""Not in GBS"",(VLOOKUP(RC[2],'GBS Data'!R8C5:R1046427C17,2,0))))"
ActiveCell.Offset(0, 2).Range("A1").Select
ActiveCell.FormulaR1C1 = _
    "=IF(IF(ISERROR(VLOOKUP(RC[-7],Matrix!R10C1:R150C14,14,0)),"""",VLOOKUP(RC[-7],Matrix!R10C1:R150C14,14,0))="""",R[-1]C,VLOOKUP(RC[-7],Matrix!R10C1:R150C14,14,0))"
ActiveCell.Offset(0, 2).Range("A1").Select
Selection.FormulaArray = _
    "=SMALL(IF(Pivot!C3=R[7]C[-2],ROW(Pivot!C3),""""),ROW(R[-7]))"
ActiveCell.Offset(0, 2).Range("A1").Select
    ActiveCell.FormulaR1C1 = _
    "=IF(RC[-8]="""","""",IF(ISERROR(VLOOKUP(RC8,'GBS Data'!C5:C41,R1C,0)),"""",VLOOKUP(RC8,'GBS Data'!C5:C41,R1C12,0)))"
ActiveCell.Offset(0, 2).Range("A1").Select
ActiveCell.FormulaR1C1 = _
    "=IF(RC[-10]-"""","""",IF(ISERROR(VLOOKUP(RC8,'GBS Data'!C5:C41,R1C,0)),"""",VLOOKUP(RC8,'GBS Data'!C5:C41,R1C12,0)))"
ActiveCell.Offset(0, 2).Range("A1").Select
ActiveCell.FormulaR1C1 = _
    "=IF(RC[-12]="""","""",IF(ISERROR(VLOOKUP(RC8,'GBS Data'!C5:C41,R1C,0)),"""",VLOOKUP(RC8,'GBS Data'!C5:C41,R1C12,0)))"
ActiveCell.Offset(0, 2).Range("A1").Select
ActiveCell.FormulaR1C1 = _
    "=IF(RC[-14]="""","""",VLOOKUP(RC[-10],Matrix!R10C14:R10000C15,2,0))"
ActiveCell.Offset(0, 2).Range("A1").Select
ActiveCell.FormulaR1C1 = _
    "=IF(RC[-14]=""Not in GBS"",""Not in GBS"",IF(ISERROR(VLOOKUP(RC[-10],Pivot!C1:C5,5,0)),"""",VLOOKUP(RC[-10],Pivot!C1:C5,5,0)))"
ActiveCell.Offset(0, 2).Range("A1").Select
ActiveCell.FormulaR1C1 = _
    "=IF(RC[-18]="""","""",COUNTIF('GBS Data'!C3,'Product Summary'!RC8&'Product Summary'!R1C24))"
ActiveCell.Offset(0, 2).Range("A1").Select
     ActiveCell.FormulaR1C1 = _
    "=IF(RC[-22]="""",IF(ISERROR(VLOOKUP(TRIM(RC8)&TRIM(R1C)&TRIM(RC20),'GBS Data'!R8C4:R1048576C41,13,0)),"""",IF(RC[-22]="""",VLOOKUP(TRIM(RC8)&TRIM(R1C)&TRIM(RC20),'GBS Data'!R8C4:R1048576C41,13,0),SUMIF('GBS Data'!C3,'Product Summary'!RC8&'Product Summary'!R1C24,'GBS Data'!C16:C[-8]))),SUMIF('GBS Data'!C3,R8C8&R1C24,'GBS Data'!C16))"

ActiveCell.Offset(0, -20).Range("A1:U1").Select
Application.CutCopyMode = False
Selection.Copy

Do
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveSheet.Paste

Loop Until ActiveCell.Offset(0, 16) = ""

ActiveCell.Offset(1, 0).Range("A1").Select

Loop Until Range("H1").Value = "Stop"

首先,我们来解释一下。将整数作为其第二个参数。这意味着有多小;基本上是最小的、第二小的、第三小的等等。
行(1:1)
公式在填充时变为行(2:2)、行(3:3)等。结果是1、2、3等,它实现了从较小值返回顺序值的第一、第二、第三等

所以,要重置行返回的序数值,只需要一点数学知识。如果我们在第1行附近添加一个divsor,并提供6,我们将接近。事实上,我们会得到一系列重复的数字0,1,2,3,4,5。我们所要做的就是加1,得到一系列从1到6的数字,这些数字会自动重复

将以下内容放入任何未使用的单元格中并填写

=MOD(ROW(1:1)-1, 6)+1
这将产生一系列数字,如1,2,3,4,5,6,1,2,3,4等。将其应用到公式中,公式变成

Selection.FormulaArray = _
  "=SMALL(IF(Pivot!C3=R[7]C[-2],ROW(Pivot!C3),""""),MOD(ROW(R[-7])-1, 6)+1)"
使用公式的第一行应为

=SMALL(IF(Pivot!$C:$C=H8,ROW(Pivot!$C:$C),""), MOD(ROW(1:1)-1, 6)+1)

你需要发布更多的代码才能得到正确的答案。我们需要知道什么触发器重新启动循环。您以前使用过变量吗?一旦公式返回零,就会触发循环重新启动。我会将整个嵌套循环添加到发布中。