繁体   English   中英

Excel - 写一个复杂的公式

[英]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“循环”的人来说,这是一个很好的例子,说明如何通过使用RowIndirect函数每次在具有更高 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM