我在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的链接,以便于复制/粘贴。 感谢您的时间和帮助。
答案 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))
对于任何希望在常规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。