MS Excel中的数字格式的SI前缀

有谁知道是否有可能在MS Excel中显示带有SI前缀的数字?

我想要

… 1 n,1μ,1 m,1,1 k,1M,1 G,…

而不是科学的格式

… 1E-09,1E-06,1E-03,1,1E + 03,1E + 06。 1E + 09,…

也许增加一个像V(伏特),F(法拉)等单位

如果单元格仍然包含数字而不是一个string,我会是完美的,所以它可以很容易地改变为另一种格式(回到科学或其他)

没有解决scheme比科学记数法更好。

如果您使用自定义数字格式,那么您将不得不手动(或使用VBA)input它们,以便掩盖单元格的实际内容。

例如,如果你想显示下面的格式对:

 1 n 1E-09 1 µ 1E-06 1 m 1E-03 1 1 1 k 1E+03 1 M 1E+06 1 G 1E+09 

如果你有0.001,你将不得不把格式设置为"1 m" – 这将掩盖数字,所以如果你有0.002,你将不得不把它设置为"2 m" – 如果你把它改为0.004仍然会显示2 m 。 这显然不理想。

你可以将它设置为一个双列表,在左边有值,然后用右边的单位显示一个公式,但是最后你不能用格式化的值进行math运算。

所以基本上答案是“不”,这是不可能的。

理论上你可以编写一个VBA脚本,每当一个数字被改变的时候,它就会根据单元格的内容自动改变可见内容,但是脚本会很笨重,如果你发送了macros,就会给你发送的人造成严重的麻烦。 这也将需要各种各样的angular落案件,取决于你是否想在某些单元格中“正常”格式化数字。 所以尽pipe这在理论上是可能的,但实际上是不可能的

这是可能的,尽pipe使用转换表和匹配和索引function庞大。

从这样的转换表(2列):

 1.E+15 P 1.E+12 T 1.E+09 G 1.E+06 M 1.E+03 k 1.E+00 1.E-03 m 1.E-06 µ 1.E-09 n 1.E-12 p 1.E-15 f 

您可以执行以下翻译

 3.68437E+11 --> 368.44 G 

如果您在列A和B中具有转换表,并在单元格G1中具有未格式化的数字

 H1 =G1/INDEX(A:A,MATCH(G1,$A:$A,-1)+1) I1 =INDEX($B:$B,MATCH(G1,$A:$A,-1)+1) 

那么正确的数字将在列H中显示,并在列I中添加后缀/前缀。

它仍然很笨拙,只能用于最后的输出,因为修改后的数字的计算必须包括反向翻译。

我不知道这样做的数字格式(在那里你可以使用格式化的数字,因为你可以使用任何其他数值进行后续计算),但是为了简单地使用SI前缀表示数字,下面是我使用的公式。 它采用指定单元格中的公式(通常在它旁边,在这种情况下为E28),对数字进行缩放,四舍五入到指定数量的有效数字(本例中为3),附加适当的SI前缀,然后附加指定单位(在这种情况下,法拉的'F')。 这里的优点是公式是独立的,不需要任何外部参考表。 这个公式适用于通过Tera(10 ^ 12)的毫微微(10 ^ -15),但是可以容易地扩展用于额外的前缀

 =CONCAT( ROUND( IF(E28>1E12, E28/1E12, IF(E28>1E9, E28/1E9, IF(E28>1E6, E28/1E6, IF(E28>1E3, E28/1E3, IF(E28>1, E28, IF(E28>1E-3, E28*1E3, IF(E28>1E-6, E28*1E6, IF(E28>1E-9, E28*1E9, IF(E28>1E-12, E28*1E12, E28*1E15 ) ) ) ) ) ) ) ) ), 3 +N("This is the number of significant digits to round to") -(1+INT(LOG10(ABS( IF(E28>1E12, E28/1E12, IF(E28>1E9, E28/1E9, IF(E28>1E6, E28/1E6, IF(E28>1E3, E28/1E3, IF(E28>1, E28, IF(E28>1E-3, E28*1E3, IF(E28>1E-6, E28*1E6, IF(E28>1E-9, E28*1E9, IF(E28>1E-12, E28*1E12, E28*1E15 ) ) ) ) ) ) ) ) ) )))) ), IF(E28>1E12, "T", IF(E28>1E9, "G", IF(E28>1E6, "M", IF(E28>1E3, "k", IF(E28>1, "", IF(E28>1E-3, "m", IF(E28>1E-6, "µ", IF(E28>1E-9, "n", IF(E28>1E-12, "p", "f" ) ) ) ) ) ) ) ) ), "F" +N("This is the unit symbol that will be appended to the end") ) 

如果你想将十进制数字舍去到有效数字,这个公式就更简单了:

 =CONCAT( ROUND( IF(E28>1E12, E28/1E12, IF(E28>1E9, E28/1E9, IF(E28>1E6, E28/1E6, IF(E28>1E3, E28/1E3, IF(E28>1, E28, IF(E28>1E-3, E28*1E3, IF(E28>1E-6, E28*1E6, IF(E28>1E-9, E28*1E9, IF(E28>1E-12, E28*1E12, E28*1E15 ) ) ) ) ) ) ) ) ), 3 +N("This is the number of decimal digits to round to") ), IF(E28>1E12, "T", IF(E28>1E9, "G", IF(E28>1E6, "M", IF(E28>1E3, "k", IF(E28>1, "", IF(E28>1E-3, "m", IF(E28>1E-6, "µ", IF(E28>1E-9, "n", IF(E28>1E-12, "p", "f" ) ) ) ) ) ) ) ) ), "F" +N("This is the unit symbol that will be appended to the end") ) 

请注意,我已经用指数表示法编写了所有的缩放常量,当您input公式时,Excel会将它们更改为纯数字。 通过使用相对单元格引用,可以很容易地将公式复制并粘贴到需要的位置。

这个公式可以被压缩成一个IF / CONCAT / ROUND语句块,但是按照我在这里所做的排列,可以将舍入常数分成公式中的一个点,使得它更容易更改。

只需select要包含给定符号的单元格或单元格区域即可。 右键单击单元格并selectFORMAT CELLS。 select左边的数字格式,在右边input小数点等。 现在一路走下左边的格式选项列表并selectCUSTOM。 (重要提示:请勿在右侧select任何自定义格式选项。)在TYPE下面的框中单击,然后在自定义格式选项列表的上方单击。 (此框显示您当前select的格式。{0.00如果您select了默认的数字格式}您想要保留此格式并添加额外的格式。)点击0.00的右侧,并键入以下内容:“μ”点击OKAY正常input您的数据。 格式化单元格对您input的值没有影响。 您可以正常执行所有function。 我附上一张照片,在这里我使用了相同的说明,将垃圾和希腊MU符号应用于数值,并进行了一些基本的计算,而不妨碍Excel的function。 Excel中的特殊符号