蒙肇敏
(靈山縣靈東水庫管理局,廣西 靈山 535426)
靈東水庫位于欽州市靈山縣佛子鎮境內,壩址位于靈山縣東面的佛子鎮元眼村的大排麓嶺,距靈山縣城14 km,有公路與縣城相通,水庫座落在欽州市主要河流欽江干流的上游,控制集雨面積145 km2。靈東水庫是一座以灌溉為主,兼顧防洪、供水、發電等綜合利用的大(2)型水利工程。根據水文復核結果,100 a一遇設計洪水位101.486 m,5000 a 一遇洪水位104.39 m,總庫容為1.69 億m3。水庫樞紐主要建筑物由大壩、溢洪道、放水設施和壩后電站組成。
靈東水庫于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 不來報則判斷為數據斷報

采用Excel VBA 程序能快速整合原始數據文件,遙測系統只能導出當天或者上一天的數據,過了就不能導出,只能查看,可以用如下宏代碼解決這個問題。



此宏代碼會按列合并文件,所以最好是同一格式的文件,不然,有些合并行看起來有點亂。通過此代碼把其他文件的數據拷貝到當前文件(見圖1),一年365個文件,幾分鐘就可以處理完畢。

圖1 按列合并后得到的當前文件
隨著水文測報自動化水平的不斷提高,計算機在水文資料整編中應用非常廣,Excel作為最常用的整編工具,學會其中的函數能提高工作效率,用Excel VBA 程序來進行整編,更能起到事半功倍的作用。