湖北省十堰市水文水资源勘测局湖北十堰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", DIG + Abs(Trn) - 1)
End If
TFM = "0" & TFM
If Int(.Log(Temp1)) < 0 Then
TFM = TFM & .Rept("0", -Int(.Log(Temp1)))
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", DIG - Int(.Log(Temp1)) - 1)
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即可。
论文作者:孙坤
论文发表刊物:《工程管理前沿》2019年第04期
论文发表时间:2019/6/21
标签:水文论文; 函数论文; 数据论文; 位数论文; 自定义论文; 数字论文; 精度论文; 《工程管理前沿》2019年第04期论文;