在工程环境中,通常需要“标准化”

数字以某种方式。例如,您可能需要显示归一化为10 ^ 3的倍数的数值,以便将7340表示为7.34,将73400表示为73.4。

在Excel中,可以使用自定义数字格式以科学计数法表示信息,从而将数字的显示标准化为10 ^ 3的倍数。为此,您可以按照以下步骤操作:

。选择要格式化的单元格。

。从格式菜单中选择单元格选项。 Excel将显示“设置单元格格式”对话框。

。确保选择了“数字”选项卡。

。在格式类别列表中,选择“自定义”。 (请参见图1。)

。在“类型”框中,输入## 0.0E + 0作为格式。 (这仅在小数点后方提供一个数字。如果要更多,请在小数点后增加零的数目。)

。单击确定。

现在,当您在单元格中输入数字(例如7340)时,Excel会将其显示为7.3E + 3。由于输入单元格格式的方式,E之后的部分将始终为3的倍数。

很好,这很好,但是如果您只想在单元格中使用7.3,然后在相邻的单元格中带有单位的度量前缀(例如公斤)怎么办?这有点复杂,但是可以使用公式来完成。例如,假设您在单元格A2中有原始号码,在单元格B2中有归一化的数字,并在单元格C2中有模数前缀和单元名。您需要做的就是在单元格B2中输入以下公式:

=IF(OR(A2>=1,A2<=-1),SIGN(A2)(ABS(A2)/(10^(3INT(LOG(ABS(A2))/3)))), IF(A2=0,0,SIGN(A2)(ABS(A2)10^(-3*INT(LOG(ABS(A2))/3)))))

假设您使用的单位是一个称为foo的假想单位,则在单元格C2中,您将使用以下不同的公式:

=IF(OR(A2>=1, A2<=-1),CHOOSE(INT(LOG(ABS(A2))/3)+1, "Foos", "Kilofoos", "Megafoos", "Gigafoos", "Terafoos", "Petafoos", "Exafoos"), IF(A2=0,"",CHOOSE(INT(-LOG(ABS(A2))/3)+1, "Millifoos", "Microfoos", "Nanofoos", "Picofoos", "Femtofoos", "Attofoos")))

这些公式似乎有些长,而且确实如此。但是,它们适用于大约-9.99999E-18至9.99999E + 20之间的任何数字。

例如,如果将数字.000125放在单元格A2中,则单元格B2将包含125,而单元格C2将包含Millifoos。

如果您不希望在工作簿中使用更长的公式,可以开发一些VBA函数来解决问题。

以下函数MySciNum返回规范化的数字。因此,您将在单元格B2中使用= MySciNum(A2)获得与上述相同的结果:

Function MySciNum(BaseNum As Double) As Double     Select Case BaseNum         Case Is >= 1             While Abs(BaseNum) > 1000                 BaseNum = BaseNum / 1000             Wend         Case 0             'Do nothing         Case Else             While Abs(BaseNum) < 1                 BaseNum = BaseNum * 1000             Wend     End Select     MySciNum = BaseNum End Function

该函数仅返回一个数字。要返回带有适当度量标准前缀的单位,可以使用以下函数。您需要做的就是将单元格引用和单个单元的名称传递给它。

例如,您可以使用= MySciPre(A2,“ foo”)。宏如下:

Function MySciPre(BaseNum As Double, Unit As String) As String     Dim OrigNum As Double     Dim Pref As Integer     Dim Temp As String

Pref = 0     OrigNum = BaseNum     Select Case BaseNum         Case Is >= 1             While Abs(BaseNum) > 1000                 BaseNum = BaseNum / 1000                 Pref = Pref + 1             Wend         Case 0             Pref = 99         Case Else             While Abs(BaseNum) < 1                 BaseNum = BaseNum * 1000                 Pref = Pref - 1             Wend     End Select

Select Case Pref         Case -6             Temp = "atto" & Unit         Case -5             Temp = "femto" & Unit         Case -4             Temp = "pico" & Unit         Case -3             Temp = "nano" & Unit         Case -2             Temp = "micro" & Unit         Case -1             Temp = "milli" & Unit         Case 0             Temp = Unit         Case 1             Temp = "kilo" & Unit         Case 2             Temp = "mega" & Unit         Case 3             Temp = "giga" & Unit         Case 4             Temp = "tera" & Unit         Case 5             Temp = "peta" & Unit         Case 6             Temp = "exa" & Unit         Case Else             Temp = ""

End Select

If Len(Temp) > 0 Then         Temp = LCase(Temp)

Temp = UCase(Left(Temp, 1)) & Mid(Temp, 2)

If Abs(OrigNum) <> 1 Then Temp = Temp & "s"

End If

MySciPre = Temp End Function

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(2928)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本: