舍入到最接近的整数非零

时间:2015-12-12 01:08:51

标签: excel excel-formula

我希望得到一个狡猾的,好看的"四舍五入到最近的NON-ZERO整数的方法(我将只有正整数)。我有三个限制:

  1. 必须是非UDF解决方案,因为我会有一些用户想要跟踪公式。即使VBA解决方案将导致公式栏中的条目更清晰,但它们也不容易被前端"用户。
  2. 我要寻找的一些细胞本身就是很长的配方。

    • 想想=(SUMPRODUCT((A1:A20),(B1:B20)) / SUMPRODUCT((A21:A40),(B21:B40))) - (SUMPRODUCT((A41:A60),(B41:B60)) * SUMPRODUCT((A61:A80),(B61:B80))) + SUMPRODUCT((A81:A100),(B81:B100))
    • 之类的东西
    • 我无法对A1:B100中的值进行舍入,使其以整数开头。
  3. 由于必须为用户设置样式,我无法将我的公式的单元格用作参考。 (例如,我的结果只能有一列可见细胞。因此,如果我使用公式细胞作为参考,则必须隐藏公式细胞。这打破了约束#1,因为用户将难以进行公式跟踪。这种约束在下面有更详细的描述。

  4. 我能想到的最简洁的公式是:

    =IF(AND(C1 > 0, C1 < 1), ROUNDUP(C1, 0), ROUND(C1, 0))  
    

    由于#3,我无法使用C1作为参考。所以我的最终结果会更像是:

    =IF(AND((SUMPRODUCT((A1:A20),(B1:B20)) / SUMPRODUCT((A21:A40),(B21:B40))) - (SUMPRODUCT((A41:A60),(B41:B60)) * SUMPRODUCT((A61:A80),(B61:B80))) + SUMPRODUCT((A81:A100),(B81:B100)) > 0, (SUMPRODUCT((A1:A20),(B1:B20)) / SUMPRODUCT((A21:A40),(B21:B40))) - (SUMPRODUCT((A41:A60),(B41:B60)) * SUMPRODUCT((A61:A80),(B61:B80))) + SUMPRODUCT((A81:A100),(B81:B100)) < 1), ROUNDUP((SUMPRODUCT((A1:A20),(B1:B20)) / SUMPRODUCT((A21:A40),(B21:B40))) - (SUMPRODUCT((A41:A60),(B41:B60)) * SUMPRODUCT((A61:A80),(B61:B80))) + SUMPRODUCT((A81:A100),(B81:B100)), 0), ROUND((SUMPRODUCT((A1:A20),(B1:B20)) / SUMPRODUCT((A21:A40),(B21:B40))) - (SUMPRODUCT((A41:A60),(B41:B60)) * SUMPRODUCT((A61:A80),(B61:B80))) + SUMPRODUCT((A81:A100),(B81:B100)), 0))

    不太好&#34;好看&#34;。

    有什么建议吗?

2 个答案:

答案 0 :(得分:1)

编辑 删除了过于复杂的公式

另一个更简单的选项

=MAX(1,ROUND(your_formula,0))

我的公式假设your_formula只会返回正值。如果情况并非如此,请说明您对零或负结果的预期结果。

修改

关于可能的零值,请尝试此操作。我不能测试它,因为我不在电脑上:

=--(TEXT(your_formula, "[>1]0;[>0]1;0"))

答案 1 :(得分:0)

除了负数(其中没有负数)这个公式:

=(C1<>0)*IF(C1<1,1,ROUND(C1,0))   

产生与以下相同的结果:

=IF(AND(C1>0,C1<1),ROUNDUP(C1,0),ROUND(C1,0))  

并且缩短了15个字符。

当C1为零时,它通过返回FALSE来处理0(C1<>0)*有效地转换为0。否则为TRUE,然后乘以1而不是0,它不会影响公式其余部分的结果。

然后,IF语句测试C1是否小于1。如果是这样,则返回1并以其他方式应用标准舍入(对整数)。

如果使用单元格格式化输出范围,则可能会缩短公式,但是更简洁的任何内容很可能都不太可理解 - 而且可能更像Programming Puzzles & Code Golf而不是SO。

虽然:

   =--(TEXT(C1,"[>1]0;[>0]1;0"))  

确实还有4个字符。