Excel VBA程序在水文资料整编中的应用
2022-10-31蒙肇敏
蒙肇敏
(灵山县灵东水库管理局,广西 灵山 535426)
1 工程概况
灵东水库位于钦州市灵山县佛子镇境内,坝址位于灵山县东面的佛子镇元眼村的大排麓岭,距灵山县城14 km,有公路与县城相通,水库座落在钦州市主要河流钦江干流的上游,控制集雨面积145 km2。灵东水库是一座以灌溉为主,兼顾防洪、供水、发电等综合利用的大(2)型水利工程。根据水文复核结果,100 a一遇设计洪水位101.486 m,5000 a 一遇洪水位104.39 m,总库容为1.69 亿m3。水库枢纽主要建筑物由大坝、溢洪道、放水设施和坝后电站组成。
2 Excel VBA程序的应用
灵东水库于2007 年6 月建成了水库水情自动化测报系统及洪水预报调度系统。2008年以来,由笔者负责灵东水库水文资料整编工作,每天都要逐步提取自动化观测数据,工作量大。共6个雨量站,1 个水位观测站,2 个流量观测站,每年提取原始数据要花费近10 d 的时间,而且由于数据庞大,难免出现数据错漏。遥测系统数据只能当天提取,过了时间只能查看,不能提取,一年的原始数据有365个文件。相比手写的原始资料,电子化原始数据更多更复杂,如果能进一步简化原始数据提取,将能释放更多的时间。
从2019 年起,笔者认真学习Excel VBA 程序,摸索用Excel VBA 程序提取原始数据与整编成果。表1 是笔者整编单位遥测系统所得的部分原始资料,因保密需要,水位一律用1 表示,雨量一律用2代表数据。由于雨量整编有时段降雨量摘录,故时间B 列可以用Sheets("原始数据").Cells(i,5)=(Month(Sheets("原始数据").Cells(i,2)))&"月"&(Day(Sheets("原始数据").Cells(i,2)))& "日" &(Hour(Sheets("原始数据").Cells(i,2)))&"时",然后根据每个时段的水位按所收集的水位条数取其平均值,雨量按所收集的数值累计。
表1 整编后的部分原始资料
9 1月5日21:00 10 1月6日0:00 11 1月6日03:00 12 1月6日04:00 13 2 1月6日05:00 2 14 1月6日05:00 15 1月6日07:00 16 1月6日10:00 17 1月6日13:00 18 1月6日16:00 19 1月6日20:00 20 2 1月6日23:00 2 21 1月7日02:00 22 1月7日02:00 23 1月7日03:00 24 1月7日05:00 25 1月7日07:00 26 1月7日08:00 24 27 22 2 1月7日08:00 28 2 1月7日09:00 4 29 2 1月7日09:00 30 2019-01-05 21:15 2019-01-06 00:31 2019-01-06 03:47 2019-01-06 04:36 2019-01-06 05:26 2019-01-06 05:42 2019-01-06 07:03 2019-01-06 10:19 2019-01-06 13:34 2019-01-06 16:50 2019-01-06 20:06 2019-01-06 23:21 2019-01-07 02:37 2019-01-07 02:53 2019-01-07 03:10 2019-01-07 05:53 2019-01-07 07:15 2019-01-07 08:06 2019-01-07 08:55 2019-01-07 09:09 2019-01-07 09:41 2019-01-07 10:15 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1月7日10:00 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
把月-日-时串联,建立目标表格和原始数据表格匹配通道,通过Excel VBA find 函数查找目标文件的日期时间,对应原始数据表中的日期时间,当互相配对时,就把水位填到对应时间行的某一列。几行的程序,用一两分钟的时间就可以完成几天的工作量,效率非常高。
水位跟雨量不同的是,水位每个时段必然都是有数值的,如果遥测系统数据有变化,则实时收集发回中心站。没有变化的时候,可能是一天收集一次,故必须在每个时段把对应的水位按上个时段的水位给加上去。偶尔会因为通信故障导致某一时间段没有数据,所以笔者根据本单位的实际情况,加了一段代码用以判别是正常的的空值还是故障导致的空值。所加代码如下:
Sub 判断水位有没有断报()
If lastrow-firstrow >25 Then‘超过25 h 不来报则判断为数据断报
3 遥测系统历史数据处理
采用Excel VBA 程序能快速整合原始数据文件,遥测系统只能导出当天或者上一天的数据,过了就不能导出,只能查看,可以用如下宏代码解决这个问题。
此宏代码会按列合并文件,所以最好是同一格式的文件,不然,有些合并行看起来有点乱。通过此代码把其他文件的数据拷贝到当前文件(见图1),一年365个文件,几分钟就可以处理完毕。
图1 按列合并后得到的当前文件
4 结语
随着水文测报自动化水平的不断提高,计算机在水文资料整编中应用非常广,Excel作为最常用的整编工具,学会其中的函数能提高工作效率,用Excel VBA 程序来进行整编,更能起到事半功倍的作用。