Loops 为包含字符串搜索和sumifs的公式创建VBA循环

Loops 为包含字符串搜索和sumifs的公式创建VBA循环,loops,excel,while-loop,excel-2007,vba,Loops,Excel,While Loop,Excel 2007,Vba,我有一个公式,可以在另一个工作表上搜索列标题,一旦找到它,它就会经过一些sumifs。我的数据大致如下: 1 8 10 11 12 Column E ... Column N ... Column O ... Column AB Column AC Column AD Column AE Existing CCS

我有一个公式,可以在另一个工作表上搜索列标题,一旦找到它,它就会经过一些
sumifs
。我的数据大致如下:

    1                          8            10                      11         12
Column E  ...  Column N ... Column O ... Column AB   Column AC   Column AD   Column AE

Existing        CCS           data         100.00      100.00     120.00      150.00
=SUM(
 (SUMIFS(INDEX('Program Data'!$A:$GA,0,MATCH($AD1,'Data'!1:1,0)),   
   'Data'!$N:$N,"CCS",'Data'!$E:$E,"Existing")+SUMIFS(INDEX(' 
   'Data'!$A:$GA,0,MATCH($AD1,'Data'!1:1,0)),'Data'!$N:$N,"CCS", 
   'Data'!$E:$E,"Deep"))*(1<=MATCH($A$1,$AC$1:$AC$12,0)),
 (SUMIFS(INDEX('Data'!$A:$GA,0,MATCH($AD2,'Program Data'!1:1,0)),   
   'Data'!$N:$N,"CCS",'Data'!$E:$E,"Existing")+SUMIFS(INDEX(' 
   'Data'!$A:$GA,0,MATCH($AD2,'Data'!1:1,0)),'Data'!$N:$N,"CCS",
   'Data'!$E:$E,"Deep"))*(2<=MATCH($A$1,$AC$1:$AC$12,0)),
 (SUMIFS(INDEX('Data'!$A:$GA,0,MATCH($AD3,'Data'!1:1,0)), 
   'Data'!$N:$N,"CCS",'Data'!$E:$E,"Existing")+SUMIFS(INDEX(
   'Data'!$A:$GA,0,MATCH($AD3,'Data'!1:1,0)),'Data'!$N:$N,"CCS", 
   'Data'!$E:$E,"Deep"))*(3<=MATCH($A$1,$AC$1:$AC$12,0)),
  ....,....,....
 (SUMIFS(INDEX('Data'!$A:$GA,0,MATCH($AD12,'Data'!1:1,0)),
   'Data'!$N:$N,"CCS",'Data'!$E:$E,"Existing")+SUMIFS(INDEX( 
   'Data'!$A:$GA,0,MATCH($AD12,'Data'!1:1,0)), 
   'Data'!$N:$N,"CCS",'Data'!$E:$E,"Deep"))*(12<=MATCH($A$1,$AC$1:$AC$12,0)))
列名上方的数字很重要,我使用它们来指定与公式相关的列。现在,实际上只有少数细胞对循环有意义。单元格A1具有我要终止的列的编号。单元格B1具有我要从中开始的列的编号。因此,如果我选择
A1=8
B1=1
,我希望下面的代码运行
sumifs
,首先搜索列
1
,然后搜索列
2
,一直到列
8
,然后将每个循环中的所有值相加,并给出总数。以上表为例,如果我设置了
A1=“12”
B1=“10”
,我希望它吐出
370.00

我目前的公式是:

=SUMIFS(索引('Program Data'!$A:$GA,0,匹配(A1,'Data'!$1:$1,0)),'Data'!$N:$N,“CCS”,
“数据”!$E:$E,“现有”)+SUMIFS(索引('Data'!$A:$GA,0,匹配(A1,'Data'!$1:$1,0)),
“数据”!$N:$N,“CCS”,“数据”!$E:$E,“Deep”)

上面的公式只给出了
A1
中包含数字字符串的列的总数,但我需要包含
B1->A1
中字符串的所有列的总数

编辑 按照要求,下面是我在这个循环中失败的尝试。由于B1基本上总是一个静态数字(意味着它总是45或88或其他数字),我想我可以创建一个循环,告诉它从B1的任何值开始,然后根据需要创建并将公式放入单元格中。所以对于这个,B1=1=z

Sub LoopingYTD()
Dim z As Integer: z = 1
Dim formulaString2 As String
Do Until z = Range("A1") + 1
    If formulaString2 = "" Then
        formulaString2 = "="
    Else
        formulaString2 = formulaString2 & " + "
    End If

    formulaString2 = formulaString2 + " SUMIFS(INDEX('Data'!A:GA,0,MATCH("
    formulaString2 = formulaString2 & """*"" & 
    formulaString2 = formulaString2 & "z"&" ""
    formulaString2 = formulaString2 & """*""" & ",'Data'!1:1,0)),"
    formulaString2 = formulaString2 & "'Data'!$N:$N,”CCS”,”        
    formulaString2 = formulaString2 & “'Data'!$E:$E,”Existing”))"

    formulaString2 = formulaString2 & "+ SUMIFS(INDEX('Data'!A:GA,0,MATCH("
    formulaString2 = formulaString2 & """*"" & 
    formulaString2 = formulaString2 & "z"&" ""
    formulaString2 = formulaString2 & """*""" & ",'Data'!1:1,0)),"
    formulaString2 = formulaString2 & "'Data'!$N:$N,”CCS”,”        
    formulaString2 = formulaString2 & “Data'!$E:$E, ”Deep”))"
    z = z + 1
Loop
Range("B20").Value = formulaString2
我不断得到一个“应用程序定义的或对象定义的错误”,尽管我不确定如何补救


这是根据早些时候的一项建议得出的。从那以后,我一直在尝试简化它,因为这有点混乱,所以我只想让它搜索一个单一的数字字符串。基本上是在链接中运行代码,但我不希望使用基于几个单元格的长而复杂的字符串,我只希望它一直计数,直到达到A1中的值

好吧,如果B始终是一个静态数字,那么只需创建一个列,其中包含从B开始的可能数字,并计算每个月的所有可能数字。如果B=20,A,请告诉我们你试过什么?询问代码的问题必须表明对正在解决的问题的最低理解。包括尝试的解决方案、为什么它们不起作用以及预期的结果。另请看:好的,西达斯,谢谢你的检查表——我将尝试更好地澄清。这些数字与月份有关吗?看起来像是财务数据…是的,他们是!基本上,它是加在一起的月份,但它们不是相邻的,所以我试图用这个数字符号来表示月份的增加。
=SUM(
 (SUMIFS(INDEX('Program Data'!$A:$GA,0,MATCH($AD1,'Data'!1:1,0)),   
   'Data'!$N:$N,"CCS",'Data'!$E:$E,"Existing")+SUMIFS(INDEX(' 
   'Data'!$A:$GA,0,MATCH($AD1,'Data'!1:1,0)),'Data'!$N:$N,"CCS", 
   'Data'!$E:$E,"Deep"))*(1<=MATCH($A$1,$AC$1:$AC$12,0)),
 (SUMIFS(INDEX('Data'!$A:$GA,0,MATCH($AD2,'Program Data'!1:1,0)),   
   'Data'!$N:$N,"CCS",'Data'!$E:$E,"Existing")+SUMIFS(INDEX(' 
   'Data'!$A:$GA,0,MATCH($AD2,'Data'!1:1,0)),'Data'!$N:$N,"CCS",
   'Data'!$E:$E,"Deep"))*(2<=MATCH($A$1,$AC$1:$AC$12,0)),
 (SUMIFS(INDEX('Data'!$A:$GA,0,MATCH($AD3,'Data'!1:1,0)), 
   'Data'!$N:$N,"CCS",'Data'!$E:$E,"Existing")+SUMIFS(INDEX(
   'Data'!$A:$GA,0,MATCH($AD3,'Data'!1:1,0)),'Data'!$N:$N,"CCS", 
   'Data'!$E:$E,"Deep"))*(3<=MATCH($A$1,$AC$1:$AC$12,0)),
  ....,....,....
 (SUMIFS(INDEX('Data'!$A:$GA,0,MATCH($AD12,'Data'!1:1,0)),
   'Data'!$N:$N,"CCS",'Data'!$E:$E,"Existing")+SUMIFS(INDEX( 
   'Data'!$A:$GA,0,MATCH($AD12,'Data'!1:1,0)), 
   'Data'!$N:$N,"CCS",'Data'!$E:$E,"Deep"))*(12<=MATCH($A$1,$AC$1:$AC$12,0)))