我希望得到一个狡猾的,好看的"四舍五入到最近的NON-ZERO整数的方法(我将只有正整数)。我有三个限制:
我要寻找的一些细胞本身就是很长的配方。
=(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,因为用户将难以进行公式跟踪。这种约束在下面有更详细的描述。
我能想到的最简洁的公式是:
=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;。
有什么建议吗?
答案 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个字符。