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)))