为包含stringsearch和sumifs的公式创buildVBA循环

我有一个公式,在另一张表上search列标题,然后一旦它发现它通过一些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 

列名上面的数字是重要的,我用它们来指定与我的公式相关的列。 现在,实际上只有less数几个单元对循环很重要。 单元格A1有我想终止的列号。 单元格B1有我想要开始的列号。 所以,如果我selectA1=8B1=1 ,我希望下面的代码运行sumifs开始search列1 ,然后是第2列,一直到第8列,并将所有的值从每个循环加在一起,给我总数。 以上面的表格为例,如果我设置A1="12"B1="10" ,我希望它吐出370.00

我现在的公式是这样的:

=SUMIFS(INDEX('Program Data'!$A:$GA,0,MATCH(A1,'Data'!$1:$1,0)),'Data'!$N:$N,"CCS", 'Data'!$E:$E,"Existing")+SUMIFS(INDEX('Data'!$A:$GA,0,MATCH(A1,'Data'!$1:$1,0)), 'Data'!$N:$N,"CCS",'Data'!$E:$E,"Deep")

上面的公式只给出了包含A1数值string的列的总数,但是我需要一个包含B1 -> A1string的所有列的总和。

编辑

按照要求,这是我在这个循环失败的尝试。 由于B1本质上总是一个静态数字(意味着它总是45或88),所以我想我可以创build一个循环,告诉它以B1的值开始,并且根据需要创build并删除公式它。 所以对于这个,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 

我不断收到“应用程序定义或对象定义的错误”,但我不确定这是什么补救措施。

这是基于我提出的一个早期问题的build议。 从那以后,我一直在试图简化它,因为这有点麻烦,所以我只是希望它search一串数字。 基本上在链接中运行代码,而不是一些基于几个单元格的长,复杂的string,我只是希望它的计数,直到达到A1的值。

那么,如果B始终是一个静态数字,只需创build一个列,该列包含从B开始的可能数字,并计算附加到一个月的所有可能数字。 所以如果B = 20,A <= 32,那么这个列就会像这样(可以说这是列AD):

 AC AD Jan 20 Feb 21 ... Dec 32 

然后创build一个公式,使用AC中的月份指示符将这些数字与您在A1中select的数字进行比较,如果A1 <=(AD列中的值),则将其相加。公式将会相当长,但看起来像这个:

 =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 =你想要停下来的号码。 请注意,您将语句末尾的匹配数字更改为每个升序月份数字(1-12,而不是分配的数字)。 这种方式对用户来说看起来很好(不pipe怎样,他们不一定会理解这些数字),并且仍然会输出你想要的结果。