EXCEL VBA在农村土地承包信息处理中的应用
2019-05-11李芳
李芳
(四川省煤田地质工程勘察设计研究院)
1 引言
自微软从Office97开始引入VBA以来,Excel就以其高效的办公获得了广大用户的青睐,也成为国内用户至今无法用其他表格软件完全替代Excel的主要原因。农村土地承包信息因其数据量大,错误多而成为土地信息化建设中影响工程进度的主要因素之一。笔者试图通过对这些信息的比对匹配、信息提取、格式整理等手段,最大限度简化工作量,提高工作效率。
2 功能设计
2.1 格式整理
现有农村二轮土地承包信息电子表格数据,每行人数不定,最多3个人,有可能有编号但人数为空;第1列为承包编号,2-9列每3列一个人的信息,分别是姓名、性别和出生日期,现为方便信息核对,需要每行只保留一个人的信息。表格样式(图1)及核心代码如下:
n=0
For i = 2 To 9999
For j = 2 To 10 Step 3
If cells(i, j) = "" Then
Exit For
End If
n = n + 1
bh(n) = cells(i, 1) '编号
xm(n) = cells (i, j) '姓名
xb(n) = cells (i, j + 1) '
性别
sr(n) = cells (i, j + 2) '出生日期
Next j
Next i
字段被记录到数组中,代码中使用了一个Exit For语句,即巧妙绕开了非法数据,只记录有效数据到数组中,同时,数组方式记录可以选择性输出需要的字段值。为了缩短运行时间,还可以在外层for循环加入循环终止条件,在编号为空时跳出循环。
2.2 信息比对匹配
已有户籍信息表,其中缺少二轮承包编号;已有二轮承包信息表,其中缺少身份证号码和与户主关系,现需要通过信息比对将二轮承包编号合到户籍表上。表格样式(图2)及核心代码如下:
For i = 2 To 9999 For j = 2 To 9999
If cells (i, 2) = cells (j, 10)Then
If mid(cells (i, 3) , 7, 8) =cells (j, 12) Then
If cells (i, 5) = cells (j, 11)Then
Cells(i, 1) = Cells(j, 9)
Cells(j, 9) = ""
Cells(j, 10) = ""
图1 二轮承包信息表
图2 户籍信息与承包信息比对匹配
图3 核对信息表
图4 承包人信息表
图5 共有人信息表
Cells(j, 11) = ""
Cells(j, 12) = ""
End If
End If
End If
Next j
Next i
可以采用and语句以减少if语句的使用量,但是可能需要换行连接以便于阅读。由于二轮承包表上的信息错误较多,按此方式能够完全比对得上的信息实际不到一半,因此可以采用其他既安全又实用的匹配条件再进行二次比对,缩小人为比对的数据量。
2.3 信息提取
在信息核对好后,需要将核对信息表上的承包人(即户主)信息单独提取出来,并处理为承包人信息表和共有人信息表,表格样式(图3、4、5)及核心代码如下:
'承包人信息表处理n=0
for i=3 to 9999
If Cells(i, 4) = "户主" Then
n = n + 1
If n < 10 Then
Cells(i, 9) = s1 & "00" & n
'承包人编码
End If
If n >= 10 Then
Cells(i, 9) = s1 & "0" & n
'承包人编码
End If
Cells(i, 10) = Cells(i, 2)
'承包人姓名
Cells(i, 11) = "居民身份证"
'证件名称
Cells(i, 12) = Cells(i, 3)
'证件号码
Cells(i, 14) = Mid(Cells(i, 3),7, 8) '出生日期
If Mid(Cells(i, 3), 17, 1) Mod 2= 0 Then
Cells(i, 13) = "2" '性别:1-男,2-女
End If
If Mid(Cells(i, 3), 17, 1) Mod 2= 1 Then
Cells(i, 13) = "1"
End If
End if
Next i
共有人信息表户主行的处理与承包人信息表类似,只是在共有人行的承包人编码和承包人姓名的赋值语句略有差别,即:
Cells(i, 9) = Cells(i - 1, 9)'承包人编码
Cells(i, 10) = Cells(i - 1, 10)'承包人姓名
由于户主的信息是在每户的第一行,因此这样做是可以的。“与承包户关系”列涉及多个数字代码,可采用块if语句判断条件或者采用多分支结构case语句判断条件再进行单元格赋值。承包人信息表和共有人信息表的字段格式即数据建库所使用的字段格式,数据的主要整理工作即到此结束。
3 结语
由于农村土地承包基础信息的错误太多,Excel VBA所能做的工作只是部分替代手工劳动,减轻需要人工干预的工作量,在实际工作中,还有许多值得改进和探讨的地方,但是从易用性和实施效果等方面综合考量,Excel VBA不失为一种好的方法,其思路和经验是值得借鉴和推广的。