excel数字格式 – 不同的十进制数字

我试图用这些规则设置一个特殊的单元格数字格式:

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

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

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

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

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

因为excel(2010)在cell格式中不支持超过2个条件(所以我不能扩展它来pipe理负数…)

无论如何要做我想要的?

谢谢

在function区的“主页”选项卡下,select“条件格式”:

条件瓷砖

然后select“新build规则”或“pipe理规则”(后者可以select“新build规则”,但也可以概览所有当前规则)

然后select使用公式来确定哪些单元格格式化,并参考单元格本身input公式(在我的情况下,单元格A1被选中,拿出$符号出来,以允许它也被应用到其他单元格本身!):

新规则

现在单击“格式…”,然后根据需要select所需的数字格式,并以小数位数的百分比表示。

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

由于值可以是负值,我使用ABS()来总是testing单元格绝对值的规则。

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

我有一个相当原始的解决scheme,在VBA中实现一个function:

 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

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

=>你可以在你想要结果的单元格中input= FormatAlignDigits(B27) 。 在这个例子中,B27是具有源数据的单元。

我的testing结果:

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

我相信可以有一个更奇特的解决scheme,例如用函数'formatStr'的参数来告诉在哪个数字的位数下降到0(这里:功率= 2;这意味着如果该值> = 100) 。 对我来说这个原始的东西工作得很好。

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

我们希望显示一个与用户input相同的数字,但不能超过6位小数。

  • 1 – > 1
  • 1,1 – > 1,1
  • 1,12 – > 1,12
  • 1,123456 – > 1,123456
  • 1,1234567 – > 1,12345 7 (从这一点开始)

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

总结一下,你必须configuration以下方法(在我为B列做的示例中):

  • INTEGER: =MOD(B2;1)=0
  • 一次十进制: =MOD(B2*10;1)=0
  • 两个十进制: =MOD(B2*100;1)=0
  • SIX DECIMALS: =MOD(B2*1000000;1)=0

在这里输入图像说明

在这里输入图像说明

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

在这里输入图像说明

最后在Excel上的工作结果:

在这里输入图像说明