基于VBA的乌鲁木齐市第二次全国污染源普查数据处理
李㊀沫(乌鲁木齐市环境监测中心站,新疆㊀乌鲁木齐㊀830000)
摘要:污染源普查工作中涉及海量数据的比对㊁审核㊁汇总,若依靠纯手工处理工作量巨大㊂为此,提出基于VBA数据批量处理方法,在EXCEL中运用集成的VBA模块进行编程,实现数据的批量提取㊁合并与审核㊂该方法不仅可极大地提高零散数据的整理效率,同时也能克服人工处理误差,提高数据处理的质量,最终为基层人员在大数据处理工作中提供思路和方法㊂
关键词:污染源普查;VBA;数据处理
中图分类号:X508㊀㊀文献标识码:A㊀㊀文章编号:1008-2301(2020)04-0033-06
DataProcessingoftheSecondNationalPollutionSourceCensusBasedonVBAinUrumqi.LiMo(Urumqienvironmentalmonitoringcenterstation,Urumqi,Xinjiang830000,China).EnvironmentalProtectionofXinjiang2020,42(4):33 38
Abstract:Surveyofpollutionsourcesinvolvedinthecomparison,reviewandsummaryofmassivedata.Ifwerelyonpuremanualprocessing,theworkloadwouldbeveryhuge.Forthisreason,abatchprocessingdatamethodbasedonVBAwasproposed.TheintegratedVBAmodulewasprogrammedinEXCELtorealizethebulkextraction,consolidationandauditingofdata.Thismethodnotonlycouldgreatlyimprovetheefficiencyofsortingscattereddata,butalsocouldovercometheerrorofmanualprocessingandimprovethequalityofdataprocessing.Itaimstoprovideideasandmethodsforgrassrootspersonnelinlargedataprocessing.
Keywords:Surveyofpollutionsources,VBA,dataprocessing
㊀㊀污染源普查是一项重大的国情调查,是环境保护的基础性工作㊂通过污染源普查可以全面掌握各
类污染源的数量㊁行业和地区分布㊂了解主要污染物产生㊁排放和处理情况,同时需要对数以百万条指标进行处理,可以说是一项系统性强㊁复杂度高㊁涉及面广的工作㊂此外,乌鲁木齐作为污染源普查的试点城市,各项工作需要先行㊁先试,配套普查软件与用户交互时间长,信息对接缓慢,软件更新周期较长,数据处理将耗费大量的人力和时间成本,极大地影响工作进度㊂为及时提高数据处理效率,提升数据质量,根据污染源普查基础数据对象格式为EXCEL表单的特点,选用对运行环境依赖较小的EXCELVBA模块,开发集成各类程序,在乌鲁木齐市污染源全面普查㊁数据审核等阶段工作中得到了广泛的应用,实现高效的数据整理与标准化㊂具体应用包括关键指标批量提取㊁企业单个表单汇总合并㊁审核规则自动化处理㊁污染物产排量校核㊁指标合理性审核等方面,技术需求与信息化运用可无缝对接,全面提高了普查数据质量及审核效率㊂
1㊀软件介绍
VisualBasicforApplications(VBA)是新一代标
新疆环境保护2020,42(4):33 38㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀EnvironmentalProtectionofXinjiang
收稿日期:2020-08-01
准宏语言,一种编程通用的自动化语言[1]㊂主要用来扩展Windows的应用程序功能,可以直接应用Office套装软件的各项强大功能,也是一种应用程式视觉化的Basic脚本,实质就是寄生于VB应用程序的版本㊂VB的可视化编程方法使得原本繁琐枯燥的Windows应用程序设计变得轻松自如㊁妙趣横生㊂以往的Windows应用程序开发工具在设计图形用户界面时,都是采用编程的方法,并伴随大量的计算任务,一个大型应用程序约有90%的程序代码用来处理用户界面,而且在程序设计过程中不能看到界面显示的效果,只有在程序执行时才能观察到,如果界面效果不佳,还需要回到程序中去修改㊂VisualBasic提供了新颖的可视化设计工具,巧妙地将Windows界面设计的复杂性封装起来,程序开发人员不必再为界面设计而编写大量程序代码,仅需采用现有工具按设计者要求的布局,在屏幕上画出所需界面,并为各图形对象设置属性即可,VB自动产生界面设计代码,这样便将事先编制好的控件可视地连接到一起,构成一个随时可调整的界面[2]㊂
vba排序函数sort用法VBA是一种事件驱动编程语言,它能够扩展微软Office的应用程序,可以很好地解决复杂数据的处理问题㊂重复任务的自动化是其最常见的用途之一,处理数据比其他语言处理数据需要编写的代码量少,简单易操作,不仅能提高效率节省时间,还能大大提高处理数据的正确率[3]㊂Office软件装机量大,几乎在任何电脑上都可直接使用VBA,安装方便,使用便捷,无需额外搭建环境,与其他语言相比在处理EXCEL文件上有着其 天然 的优势㊂
2㊀需求分析
污染源普查数据是各类源海量数据的大集合,数据量之大㊁逻辑关系之复杂程度前所未有㊂在普查数据汇总㊁分类㊁审核中,随时会面临各种各样繁琐的问题,如合并单表数据㊁表与表信息关联等大量重复的工作㊂基于VBA程序的应用开发,将需要分析的指标及参数整合在一起,单个数据不再独立,彼此之间关联,极大提高数据审核质量,普查员每发现一处错误,通过智能程序历遍所有的相关数据,做到举一反三㊂笔者根据普查过程中的经历,将数据处理㊁审核中需解决的问题汇总如下:
1)㊀各类污染源中每个企业或单位的EXCEL单个文件进行批量处理,提取每项原始指标至自定义的指标排列,提取的指标可增加逻辑判断或计算,按照普查制度中每张表号顺序依次汇总合成单个EXCEL文件,实现各源批量审核㊂
2)㊀将每个企业每张调查表中单个表单自动批量合成一个EXCEL文件,即一个企业多张表单,方便各表之间的关联审核㊂
3)㊀系统导出的所有企业汇总问题,自动分离出每个企业问题,并生成以企业名命名的单个文件,实现将企业问题单独下发㊂
4)㊀每个企业EXCEL文件中G106-1表批量提取出来,合并成为一个表单,进行k值㊁k
值公式的批量校核(普查软件无法提取k值公式的相关信息)㊂5)㊀大值排序是数据审核中的关键环节,但需要排序的指标繁多,如利用EXCEL自带的排序功能,无法同时按照不同的字段分别排序,可以使用VBA实现批量多字段的单独排序㊂
3㊀VBA实现算法案例
3.1㊀文件读取
根据统计需求任意选择EXCEL格式数据源,将目标文件放在同一个文件夹中,文件地址无固定的要求,可自动获取,文件数量可多选㊂选用Application.GetOpenFilename方法[4],显示标准的 打开 对话框,并获取用户文件名,而不必真正打开任何文件,只是把打开文件名称返回程序,相当于EXCEL打开窗口,通过该窗口选择要打开的文件,并可以返回选择的文件完整路径和文件名,如果没有选择文件,自动退出㊂
43㊀㊀㊀㊀新㊀疆㊀环㊀境㊀保㊀护㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀第42卷
主程序:
Filetoopen=Application.GetOpenFilename( excelfiles(∗.xlsx),∗.xlsx ,, 请选择要设置的企业! ,,True);IfIs
Array(filetoopen)=0ThenMsgBox 没有选择文件
3.2㊀批量提取㊁汇总指标
普查表涉及工业源㊁生活源㊁农业源㊁生活源㊁移动源五类源信息提取,表的种类繁多,每个表结构㊁类型㊁指标均不同,但提取指标数据核心算法不变,即读取选中文件 选取制定表单 记录指标 汇总数据,以生活源 行政村S102表为例汇总数据,首先设置各类对象变量,方便表之间的切换,因原表受保护,需将数据进行预处理,再次复制至新表,解除保护限制
图1㊀数据提取与汇总界面
Fig.1㊀Theinferfaceofextractingandcollectingdata
㊀㊀主程序:
SetFso=CreateObject( Scripting.FileSystemOb⁃
ject )
Setwb=GetObject(temp)
Setwk=Workbooks.Add
wk.SaveAsFilename:=ThisWorkbook.Path& \
excelnew &Trim(i)& .xlsx
wb.Worksheets( 行政村 ).Range( a1:
aw100 ).Copywk.Worksheets( Sheet1 ).Range
( a1:aw100 )
打开新表,采用单元格cell(x,y)定位的方式记
录各项指标的具体位置,按照各类源中表单的汇总格
式的要求,一一对应进行赋值,根据数据排列规律可
选用if㊁for语句简化赋值程序,最后完成数据读取和
汇总,结果显示每一个调查对象的相关数据形成一条
记录,便于后期数据汇总集中审核㊂
主程序:
Setgzb=Workbooks.Add
Application.DisplayAlerts=False
Setwb=GetObject(temp)
Cells(1,1)=wb.Sheets( sheet1 ).Range
( A4 )
Cells(i+1,1)=wb.Sheets("sheet1").Range
("f4")
依次类推工业源㊁移动源㊁集中式的相关表格,均
53第4期㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀李㊀沫:基于VBA的乌鲁木齐市第二次全国污染源普查数据处理
可按照设定的汇总表的样式提取数据
图2㊀S102数据提取汇总流程图
Fig.2㊀TheflowchartofextractingandcollectingS102data
3.3㊀多文件夹多表单合成
运用函数Dir()遍历一个文件夹中的所有文件,
读取文件中所有表单,表单名称按照表号顺序修改,依次复制到新表,完成多个企业文件夹内所有表单的合并,生成以 企业名称 命名的文件㊂
主程序:ChDirMyDirMatch=DirƔ("")
IfNotLCase(Match)=LCase(ThisWorkbook.
Name)Then
Workbooks.OpenMatch,0
ActiveSheet.CopyBefore:=ThisWorkbook.Sheets(1)
p=ActiveSheet.Range("h2").Value&iMatch=DirƔ
LoopUntilLen(Match)=0
Setyy=Worksheets( 合并 )
图3㊀S102多表单合并流程图
Fig.3㊀Theflowchartofcombining102multi⁃sheets
3.4㊀企业问题提取合成
在问题汇总表中循环语句自动判断,定位到企业
问题最后一行,并记录行号,复制到企业新表,重新命名,形成问题记录的文件,实现将企业问题分别发送,各企业对照问题可以核实修改㊂
wb.Worksheets( 审核未通过全部问题 ).Range
(wb.Worksheets( 审核未通过全部问题 ).Cells(s,
1),wb.Worksheets( 审核未通过全部问题 ).Cells(u-1,13)).Copy,wk.Worksheets( Sheet1 ).Range(wk.Worksheets( Sheet1 ).Cells(2,1),wk.
63㊀㊀㊀㊀新㊀疆㊀环㊀境㊀保㊀护㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀第42卷
Worksheets( Sheet1 ).Cells(u+1,13))wb.Worksheets(  ).Range( a2:m2 ).Copywk.Worksheets( Sheet1 ).Range( a1:m1 )
3.5㊀多文件指定表号合并
工业源G106-1表中k值审核是数据审核关键
指标,准确与否关系到核算各个企业污染物的产㊁排量核算结果,但普查软件中G106-1汇总表中不含k值公式的指标,需要从每个企业G106单表中分别调取㊂合并过程主要解决两个问题,首先提取每个企业指定表单G106中所有指标,将企业不同表单合并为一个表单,方便批量审核㊂
主程序:
第一步提取各企业G106表,按顺序依次复制到指定工作簿中:
Application.ScreenUpdating=Falsewbname=ActiveWorkbook.NameFori=1ToUBound(filetoopen)
Workbooks.OpenFilename:=filetoopen(i)wbcurrent=ActiveWorkbook.NameSheets(wjm).Cells(1,1)=filetoopen(i)Sheets(T_BAS_G106_1).Copybefore:=
Workbooks(wbname).Sheets(1)
图4㊀多企业指定表单指标汇总流程图
Fig.4㊀Theflowchartofindexsummaryofmanyenterprisesdesignatedsheets
㊀㊀第二步将各企业G106表,合并至一张表单中,每项指标整齐排列:
Forj=1ToSheets.Count,IfSheets(j).Name<>
ActiveSheet.NameThen,y=Range( a65536 ).End(xlUp).Row,x=Sheets(j).UsedRange.Rows.Count,Sheets(j).Columns( a:a ).Insert,Foru=1To
x,Sheets(j).Cells(u,1)=Sheets(j).Range( b1 )Nextu,Sheets(j).UsedRange.CopyCells(y+2,1)
EndIf,Next,Range( b1 ).Select
Application.ScreenUpdating=TrueMsgBox 合并成功
3.6㊀多指标单独排序
首先将需要排序的字段按区县㊁企业名称㊁指标
值的排列规则,复制至表单中,排序数量可自由设置,程序将自动选中表单,使用sort排序命令,可设置升序或降序顺序,是否包括标题等规则,结合循环命令for,对每一项指标进行单独排序,分开显示每个指标的排序情况,批量实现一张表中多指标单独一键排序(指标数量不限)㊂
3第4期㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀㊀李㊀沫:基于VBA的乌鲁木齐市第二次全国污染源普查数据处理