首页 > 范文大全 > 正文

EXCEL自定义函数在水文数据处理中的应用

开篇:润墨网以专业的文秘视角,为您筛选了一篇EXCEL自定义函数在水文数据处理中的应用范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:在水文工作中,几乎所有的数据都要按照《数值修约规则与极限数值的表示与判定》(GB/T8170-2008)的规定进行“进舍规则”的修约。光靠人工处理,不仅浪费人力,而且还降低了工作效率。本文利用Microsoft Office办公软件绑定的VBA(Visual Basic For Application)语言自定义函数,轻松实现“进舍规则”的修约。

关键词:“进舍规则” 水文数据 浮标法 VBA

Microsoft excel办公软件具有很强大的数值运算处理能力,但现有的内置函数并不能满足水文工作中所需要的“进舍规则”修约。如果仅靠人工的计算,则会浪费人力、降低效率;若利用Excel中绑定的VBA(Visual Basic For Application)语言自定义函数就可以轻松实现“进舍规则”的修约。

下面以Excel计算浮标法测流为例,用VBA来解决“进舍规则”的问题。

一、“进舍规则”的修约形式

根据《数值修约规则与极限数值的表示与判定》(GB/T8170-2008)规定,水文资料使用“进舍规则”的修约形式:[1]

1、拟舍弃数字的最左一位数字小于5,则舍去,保留其余各位数字不变。

2、拟舍弃数字的最左一位数字大于5,则进一,即保留数字的末位数字加1。

3、拟舍弃数字的最左一位数字是5,且其后有非0数字时进一,即保留数字的末位数字加1。

4、拟舍弃数字的最左一位数字是5,且其后无数字或皆为0时,若所保留的末位数字为奇数(1,3,5,7,9)则进一,即保留数字的末位数字加1;若保留的末位数字为偶数(0,2,4,6,8)则舍去。

5、负数修约时,先将它的绝对值按照上述1~4规定进行修约,然后在所得值前面加上负号。(以下程序并没有涉及到负数)

二、VBA程序及注解

该程序是以Excel程序内置函数为基础来完成的。定义符合“进舍规则”的函数名为round1(目前能用于浮标法测流量的部分虚流量计算,若要用于其他计算则需修改取值范围),该函数定义a,b,c,d,e,f为整数,并分别赋予为操作数字x的整数、十分位、百分位、千分位、万分位、十万分位及百万分位部分。

打开Excel,按Alt+F11即进入VBA语言,插入模块,输入以下代码:

Private Function round1(x As Double) As Double

Dim a, b, c, d, e, f As Integer

a = Val(Fix(x))

b = Val(Right(Str(Fix(x * 10)), 1))

c = Val(Right(Str(Fix(x * 100)), 1))

d = Val(Right(Str(Fix(x * 1000)), 1))

e = Val(Right(Str(Fix(x * 10000)), 1))

f = Val(Right(Str(Fix(x * 1000000)), 2))

If x >= 100 Then

If b = 5 And c = 0 And d = 0 And e = 0 And f = 0 And (a Mod 2) = 0 Then

round1 = a

Else: round1 = Round(x, 0)

End If

ElseIf x < 100 And x >= 10 Then

If c = 5 And d = 0 And e = 0 And f = 0 And (b Mod 2) = 0 Then

round1 = a + b / 10

Else: round1 = Round(x, 1)

End If

ElseIf x < 10 And x >= 1 Then

If d = 5 And e = 0 And f = 0 And (c Mod 2) = 0 Then

round1 = a + b / 10 + c / 100

Else: round1 = Round(x, 2)

End If

Else

If e = 5 And f = 0 And (d Mod 2) = 0 Then

round1 = a + b / 10 + c / 100 + d / 1000

Else: round1 = Round(x, 3)

End If

End If

End Function

三、VBA程序使用过程中应注意的问题

1、使用前先将表的精度调整成为“以显示精度为准”;

2、调整Excel安全设置:在Excel选项中点开信任中心设置,在宏设置中降低安全设置即可;

3、这种定义函数只能针对一个特定的表格,若要用于其他的表格,则需另存为“加载宏”。

基于Microsoft Excel VBA语言建立的“进舍规则”自定义函数应用于水文数据的处理,大大提高了水文工作的准确度和工作效率。该函数具有简洁、方便、精确度高等特点,若对该程序近一步修改,可广泛适用于整个水文数据处理,进而使水文数据处理的质量与效率大幅度提升。

参考文献:

[1]中华人民共和国国家质量监督检验检疫总局、中国国家标准化管理委员会,《数值修约规则与极限数值的表示与判定》,北京:中国标准出版社,2008年7月