Excel-编写复杂公式

时间:2018-11-26 15:16:44

标签: excel formula

我在AI3:AJ41范围内有以下数字:

34  3
26  3
25  3
24  2
24  2
24  2
24  2
24  2
24  2
24  2
24  2
24  2
22  2
22  2
22  2
22  2
21  2
21  2
21  2
21  2
19  2
19  2
19  2
19  2
19  2
19  2
19  2
19  2
17  2
17  2
17  2
15  2
15  2
15  2
15  2
12  1
12  1
12  1
12  1

AI列包含值,而AJ列包含单元格AJ3中的以下公式:

=ROUNDUP(AI3/12,0)

其范围为AI41

在单元格AJ2中,我有以下求和公式

=SUM(AJ3:AJ41)

得出77。

我想在单元格AI2中写一个公式,以获得与现在在AJ2中相同的结果,而无需使用(helper)列AJ,即仅使用AI列。

也许可以做一个VB宏,我不知道...

我提供了指向我的Sample File的链接,以便于复制/粘贴。 感谢您的时间和帮助。

2 个答案:

答案 0 :(得分:1)

11月27日更新

我还在机场,并决定在没有VBA / UDF的情况下解决此问题。

数组函数可以为您提供所需的内容。使用CTL SHIFT ENTER将其输入工作表中以获取非vba解决方案:

=SUM(ROUNDUP(COUNTIF(A1:AH1,">="&ROW(INDIRECT("A1:A"&MAX(A1:AH1),TRUE)))/12,0))

您可以download XLSM file here

对于任何希望在常规Excel公式中执行VBA“循环”的人来说,这都是一个很好的示例,因为每次使用{ {1}}和Row函数。 Chip Pearson's sight is brilliant for stuff like this

11月26日更新

我坐在机场很无聊,所以我会再说一遍...我认为这个自定义功能将使OP获得他们想要的东西。将其放在任何地方,您将得到77。Indirect

所需的自定义功能代码在这里:

=UMutCustom2(A1:AH1)

原始答案

我同时包括了两个示例in a file here

可能最容易使用数组公式。在单元格Ai1中输入以下公式:Function UMutCustom2(rng As Range) As Double Dim r As Long For r = 1 To Application.WorksheetFunction.Max(rng) UMutCustom2 = Application.WorksheetFunction.RoundUp(Application.WorksheetFunction.CountIf(rng, ">=" & r) / 12, 0) + UMutCustom2 Next r End Function

但是,在输入公式 后,您必须按CTR SHIFT ENTER!

这会在公式周围产生大括号,因此当您查看该公式时,它应显示为=SUM(ROUNDUP(AI3:AI999/12,0)),并且在我的文件版本中总和为77。

(好消息是,在2019 Excel的新查询engine will not require the CTL SHIFT中!)

或者,如果您想使用vba创建自定义函数,则可以使用此自定义函数,而无需ctr shift输入...这是VBA代码来实现:

{=SUM(ROUNDUP(AI3:AI999/12,0))}

答案 1 :(得分:1)

总和

如果您不想使用数组公式(懒得按CTRL SHIFT ENTER),可以使用:

=SUMPRODUCT(ROUNDUP(AI$3:AI$41/12,0))

,然后按ENTER。结果是77。

有趣

我什至不知道有一个ROUNDUP函数,所以我一开始就使用了它:

=SUMPRODUCT(IF(MOD(AI3:AI41,12)=0,INT(AI3:AI41/12),INT(AI3:AI41/12)+1))

,但是如果不将其作为数组公式输入,它将无法正常工作。这应该提醒您,即使SUMPRODUCT也不总是作为“非数组”公式起作用。

添加

如果要将相同的原理应用于范围A1:AH1,请使用以下公式:

=SUMPRODUCT(ROUNDUP($A1:$AH1/12,0))

结果是87。