发表时间:2019-06-21T17:14:22.360Z 来源:《工程管理前沿》2019年第04期 作者: 孙坤
[导读] EXCEL中自定义函数可以实现“4舍6入”和有效数字的统一处理,便于利用EXCEL进行各项水文数据计算和统计。
湖北省十堰市水文水资源勘测局 湖北十堰 442000
在各项水文数据计算与统计中,对数据精度和进位的要求与EXCEL软件中不一样,且不同的水文数据对有效数字位数的要求也不一样。直接在EXCEL中进行水文数据计算结果不符合国家标准及水文行业要求。通过在EXCEL中自定义函数可以实现“4舍6入”和有效数字的统一处理,便于利用EXCEL进行各项水文数据计算和统计。
通常在EXCEL中数据精度是按照保留“小数位数”即小数点后几位小数来对数据进行处理,进位函数为“4舍5入”;而水文数据处理中数据精度按照规范要求按照“有效数字”位数,小数点后位数不定,进位方法为“4舍6入”。通过在EXCEL中增加自定义函数JW(数值,保留有效数字位数,返回文本或数值)可对各类数字进行处理,方便快捷。JW函数与EXCEL中round函数进位对比表如下:
自定义函数具体操作步骤如下:一、在电子表格打开状态下按ALT+F11键,打开VBA编辑器;二、点击“插入”——“模块”菜单;三、在窗口中录入如下代码:
Function jw(Num As Double, DIG As Byte, Optional TorV As Boolean, Optional Way As Boolean, Optional Trn As Boolean) As Variant Dim Temp1 As Double Dim TFM As String Dim Temp2 As String Dim Tempoff As Double If Num = 0 Then Temp1 = 0 Temp2 = \"0\" GoTo ExitFn End If
With Application.WorksheetFunction
Tempoff = Abs((--Right(Num / 10 ^ (Int(.Log(Abs(Num))) - DIG + 1), 2) = 0.5) _ * ((--Right(Int(Abs(Num) / 10 ^ (Int(.Log(Abs(Num))) - DIG + 1)), 1) _ Mod 2) = 0)) * 10 ^ Int(.Log(Abs(Num)) - DIG + 1)
Temp1 = .Round(Abs(Num), -(Int(.Log(Abs(Num))) - DIG + 1)) Temp1 = Temp1 - Tempoff
Trn = Trn And Way And (10 ^ Int(.Log(Temp1)) = Temp1 And Temp1 > Abs(Num)) If DIG > 14 And Trn Then
Temp2 = \"有效位数超过14位不能进位\" GoTo ExitFn End If
If Way Then
If DIG = 1 And Int(.Log(Abs(Temp1))) = 0 And Not Trn Then TFM = \"\" Else
If Not (DIG = 1 And Int(Temp1) = Temp1 And Not Trn) Then TFM = TFM & \".\" TFM = TFM & .Rept(\"0\ End If
TFM = \"0\" & TFM
If Int(.Log(Temp1)) < 0 Then
TFM = TFM & .Rept(\"0\ ElseIf Int(.Log(Temp1)) > 0 Then TFM = TFM & \"E+###\" End If Else
TFM = \"0\"
If Not (Int(Temp1) = Temp1 And (Int(.Log(Temp1)) >= DIG - 1)) Then TFM = TFM & \".\" & .Rept(\"0\ End If
Temp1 = Temp1 * Sgn(Num)
Temp2 = .Text(Temp1, TFM) End With ExitFn:
If TorV Then jw = Temp2 Else
jw = Temp1 End If End Function
四、保存并退出VBA编辑器,在当前电子表格中就可以直接使用JW函数了,使用方法与EXCEL中自带函数一样。如果需要在所有电子表中都能使用JW函数只需把当前工作表保存为EXCEL加载宏JW,再在EXCEL添加加载宏JW即可。
因篇幅问题不能全部显示,请点此查看更多更全内容