【问题标题】:excel number format - varying decimal digitsexcel数字格式 - 不同的十进制数字
【发布时间】:2012-11-30 01:40:00
【问题描述】:

我正在尝试使用这些规则设置特殊的单元格编号格式:

  • 显示百分比
  • 最多显示 3 位数字(小数 + 整数部分)

所以我可以显示 100% 或 99.3% 或 1.27% 但不是 100.9% 或 100.27% 或 99.27%。

当然,我可以有负数 (-27.3%),这不会影响我的规则。

我尝试使用单元格格式选项但没有成功:

[<1]0.00%;[<10]0.0%;0%

因为似乎 excel (2010) 在单元格格式中不支持超过 2 个条件(所以我无法扩展它来管理负数...)

反正它在那里做我想做的事吗?

谢谢

【问题讨论】:

  • 你试过conditional格式化吗?在 Excel 2010 中,您可以根据值(条件格式)设置数字格式,并且条件数量没有限制......
  • 在数字而不是小数点处进行格式化也是非常不寻常的......所以你可能有 1.27% 或 99.1%(从 99.143% 四舍五入),实际上第一个结果比第二,但在同一个数据集中..

标签: excel formatting cell


【解决方案1】:

在功能区的主页选项卡下选择条件格式:

然后选择“新规则”或“管理规则”(后者您可以选择“新规则”,但也可以查看所有当前规则)

然后选择使用公式确定要格式化的单元格并参考单元格本身输入公式(在我的例子中,单元格A1被选中,取$退出以使其也可以应用于其他单元格本身!):

现在单击格式...,然后选择所需的数字格式为百分比和所需的小数位数。

对所有要区分的情况重复此操作。

由于值可能是负数,我使用 ABS() 始终测试单元格绝对值的规则。

请注意,您可以使所有规则适用于 2 侧有限值范围(在我的示例中,最小值为 0.1,最大值为 1(分别为 10% 和 100%)。或者,您只能确定最小值或最大值,然后在右端勾选 Stof If True 框,了解您所涉及的所有规则。

【讨论】:

  • 我没有成功使用这个:验证对话框时(点击确定按钮),Excel弹出公式错误。
  • 所以我使用了“仅格式化包含的单元格”并且效果很好。
  • 很高兴看到它现在对您有用。我不知道你出了什么问题。它实际上应该适用于我输入的示例。也许您的机器上的公式解释可能不同(逗号、分号等)
【解决方案2】:

我最近解决了这个问题,但配置了最多 6 位小数。请求如下:

我们希望以与用户输入相同的方式显示数字,但 允许不超过 6 位小数:

  • 1 -> 1
  • 1,1 -> 1,1
  • 1,12 -> 1,12
  • ...
  • 1,123456 -> 1,123456
  • 1,1234567 -> 1,123457 (从这一点开始)

这可以使用条件格式和从整数开始的每小数一个规则来解决。整数是没有小数的数字,所以X MOD 1 = 0。我们可以应用这个逻辑,将数字乘以 10^N,即 N 是我们想要的小数位数。此外,当我们检测到单元格值中的小数位数时,我们希望停止应用规则,因此请务必标记“如果为真则停止”标志,并且规则的顺序是从最严格的一个(整数)到限制越少(代表允许的最大小数位数)。

综上,你必须配置如下方式(在我为B列做的示例中):

  • 整数:=MOD(B2;1)=0
  • 一位小数:=MOD(B2*10;1)=0
  • 两个小数:=MOD(B2*100;1)=0
  • ...
  • 六位小数:=MOD(B2*1000000;1)=0

还将单元格的默认格式设置为具有支持的最大小数位数的数字:

最后是 Excel 上的工作结果:

【讨论】:

    【解决方案3】:

    通过在 VBA 中实现一个函数,我有一个相当原始的解决方案:

    Function formatStr(myVal As Double) As String
    ' the smaller the number, the more digits are to be shown
    Dim retStr      As String
    Dim absVal      As Double
    
        absVal = Abs(myVal)
    
        If absVal >= 100 Then
            retStr = "0"
        ElseIf absVal >= 10 Then retStr = "0.0"
        ElseIf absVal >= 1 Then retStr = "0.00"
        Else ' number is between -1 and 1
            retStr = ".000"
        End If
    
        formatStr = retStr
    End Function
    

    ...然后可以在这样的 VBA 语句中使用:

       myVal = 0.5555: ActiveSheet.Cells(27, 4).Value = Format(myVal, formatStr(myVal))
    

    如果你想在表格单元格中使用它,你需要另一个小功能

      Function FormatAlignDigits(myVal As Double) As Double
         FormatAlignDigits = Format(myVal, formatStr(myVal))
      End Function
    

    => 您可以在想要结果的单元格中输入 =FormatAlignDigits(B27)。 B27 是本例中包含源数据的单元格。

    我的测试结果:

    100.3 => 100
    100.5 => 101
    10.53 => 10.5
    10.55 => 10.6
    1.553 => 1.55
    1.555 => 1.56
    0.5553 => 0.555
    0.5555 => 0.556
    -0.5555 => -0.556
    -0.5553 => -0.555
    -1.555 => -1.56
    -1.553 => -1.55
    -10.55 => -10.6
    -10.53 => -10.5
    -100.5 => -101
    -100.3 => -100

    我确信可以有更花哨的解决方案,例如带有函数“formatStr”的参数,该参数告诉数字位数下降到 0 的幂(此处:幂 = 2;表示该值是否 >= 100)。 对我来说,这个原始的东西很好用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-11
      • 2021-10-27
      • 2012-11-13
      • 1970-01-01
      相关资源
      最近更新 更多