【问题标题】:Rounding up a cell value to the next multiple of 10 (not just nearest 10)将单元格值四舍五入到 10 的下一个倍数(不仅仅是最接近的 10)
【发布时间】:2014-10-26 17:53:42
【问题描述】:

我在 Sheet2 的单元格 H2 和 H3 中使用公式数组(例如),但使用 VBA 编码。 我需要对这些值进行四舍五入到下一个 10 的倍数。我不希望它们只是向上/向下舍入到最接近的 10。此外,H3 中的值是负数,因此从技术上讲“向下舍入” ' 到下一个 10 的负倍数(如果有意义的话)。

即。如果 H2 = 73,那么我希望将其四舍五入为 80,并将此值保存在单元格 I2 中 如果 H3 = -54,那么我希望将其四舍五入为 -60,并将该值保存在单元格 I3 中(假设这可能意味着将 -54 计时 -1 然后四舍五入,然后再次将 60 计时 -1)不完全确定是否它比我最初描述的方式更容易。

无论如何,只是想知道如何使用 VBA 编码来完成。 Range2 我已经理解并整理了代码。下面是单元格 H2 和 H3 的数组公式:

    ActiveSheet.Range("H2").FormulaArray = "=MAX(IF(Range2>0, Range2)"
    ActiveSheet.Range("H3").FormulaArray = "=MAX(IF(Range2<0, Range2)"
    MaxPos = ActiveSheet.Range("H2").Value
    MaxNeg = ActiveSheet.Range("H3").Value

【问题讨论】:

    标签: arrays vba excel for-loop excel-2007


    【解决方案1】:

    据我所知,您需要结合使用=CEILING(number, 10) 函数和 ABS() 并快速检查该数字是否为负数。

    例如

    【讨论】:

    • 好的,谢谢,我会试试这个和另一种方法。 B2 的公式(在您的示例中)是否将 >0 设置为
    • 如果 A1 > 0 那么它是一个正数,您可以直接调用 CEILING。如果 A1 小于 0,则需要调用 ABS() 函数将其视为正数,然后将其与 CEILING 前面的- 反转。 TypeMismatch 错误可能是一个新问题,因为它绝对与当前解决方案无关。
    • 您能按照公式中的样子输入吗? A1 将始终为正,因为我对该单元格拥有 MAX IF 数组。与 A2 相同,只有一个总是负数...
    • 图片中的公式栏是不是提供的不够?
    • 替代我的公式:=IF(A1&gt;0,CEILING(A1, 10),FLOOR(A1,10))。您更喜欢的是口味问题。如果为正,则上限从 0 舍入,如果为负,则从 0 舍入。
    猜你喜欢
    • 1970-01-01
    • 2011-03-21
    • 1970-01-01
    • 2017-07-26
    • 2013-08-31
    • 2017-05-03
    • 1970-01-01
    • 2011-03-25
    • 2010-09-24
    相关资源
    最近更新 更多