内容发布更新时间 : 2024/11/16 10:28:41星期一 下面是文章的全部内容请认真阅读。
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 = 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 = 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