[英]Excel - Writing a Complex 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
中得到的结果相同的结果,而无需使用(辅助)列AJ
,即仅使用AI
列的值。
也许它可以是一个 VB 宏,我不知道......
我提供了指向示例文件的链接,以便于复制/粘贴。 感谢您的时间和帮助。
11 月 27 日更新
我还在机场,决定在没有 VBA/UDF 的情况下尝试解决这个问题。
数组 function 可以让你得到你想要的。 对于非 vba 解决方案,使用 CTL SHIFT ENTER 将其输入到您的工作表中:
=SUM(ROUNDUP(COUNTIF(A1:AH1,">="&ROW(INDIRECT("A1:A"&MAX(A1:AH1),TRUE)))/12,0))
您可以在此处下载 XLSM 文件。
对于任何希望他们可以在常规 Excel 公式中执行 VBA“循环”的人来说,这是一个很好的例子,说明如何通过使用Row
和Indirect
函数每次在具有更高 integer 的范围内“循环” . 奇普·皮尔森 (Chip Pearson) 对这类事情的看法非常出色。
11 月 26 日更新
我坐在机场很无聊,所以我会再给这个 go...我认为这个自定义 function 会得到他们想要的 OP。 把它放在任何地方,你会得到 77。 =UMutCustom2(A1:AH1)
所需的自定义 function 代码在这里:
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
原答案
我在此处的文件中包括了这两个示例。
可能最容易使用数组公式。 在单元格 Ai1 中输入此公式: =SUM(ROUNDUP(AI3:AI999/12,0))
但是,在输入公式后,您必须按 CTR SHIFT ENTER!
这将在公式周围创建大括号,因此当您查看公式时,它应该显示: {=SUM(ROUNDUP(AI3:AI999/12,0))}
并且在我的文件版本中总和为 77。
(好消息是 2019 年 Excel 的新查询引擎将不再需要 CTL SHIFT !)
或者,如果您想使用 vba 制作自定义 function,您可以使用此自定义 function,这不需要 ctr shift enter...这是 VBA 代码:
Function UMuTCustomFunc(rng As Range) As Double
Dim ws As Worksheet, rCell As Range
Set ws = Sheets(rng.Parent.Name)
For Each rCell In Intersect(ws.UsedRange, rng).Cells
UMuTCustomFunc = Application.WorksheetFunction.RoundUp(rCell.Value / 12, 0) + UMuTCustomFunc
Next rCell
End Function
如果您不想使用数组公式(懒得按CTRL SHIFT ENTER
),您可以使用:
=SUMPRODUCT(ROUNDUP(AI$3:AI$41/12,0))
然后按ENTER
。 结果是 77。
我什至不知道有一个ROUNDUP
function 所以我一开始用这个:
=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。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.