李芳
(四川省煤田地質工程勘察設計研究院)
自微軟從Office97開始引入VBA以來,Excel就以其高效的辦公獲得了廣大用戶的青睞,也成為國內用戶至今無法用其他表格軟件完全替代Excel的主要原因。農村土地承包信息因其數據量大,錯誤多而成為土地信息化建設中影響工程進度的主要因素之一。筆者試圖通過對這些信息的比對匹配、信息提取、格式整理等手段,最大限度簡化工作量,提高工作效率。
現(xiàn)有農村二輪土地承包信息電子表格數據,每行人數不定,最多3個人,有可能有編號但人數為空;第1列為承包編號,2-9列每3列一個人的信息,分別是姓名、性別和出生日期,現(xiàn)為方便信息核對,需要每行只保留一個人的信息。表格樣式(圖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循環(huán)加入循環(huán)終止條件,在編號為空時跳出循環(huán)。
已有戶籍信息表,其中缺少二輪承包編號;已有二輪承包信息表,其中缺少身份證號碼和與戶主關系,現(xiàn)需要通過信息比對將二輪承包編號合到戶籍表上。表格樣式(圖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語句的使用量,但是可能需要換行連接以便于閱讀。由于二輪承包表上的信息錯誤較多,按此方式能夠完全比對得上的信息實際不到一半,因此可以采用其他既安全又實用的匹配條件再進行二次比對,縮小人為比對的數據量。
在信息核對好后,需要將核對信息表上的承包人(即戶主)信息單獨提取出來,并處理為承包人信息表和共有人信息表,表格樣式(圖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)'承包人姓名
由于戶主的信息是在每戶的第一行,因此這樣做是可以的?!芭c承包戶關系”列涉及多個數字代碼,可采用塊if語句判斷條件或者采用多分支結構case語句判斷條件再進行單元格賦值。承包人信息表和共有人信息表的字段格式即數據建庫所使用的字段格式,數據的主要整理工作即到此結束。
由于農村土地承包基礎信息的錯誤太多,Excel VBA所能做的工作只是部分替代手工勞動,減輕需要人工干預的工作量,在實際工作中,還有許多值得改進和探討的地方,但是從易用性和實施效果等方面綜合考量,Excel VBA不失為一種好的方法,其思路和經驗是值得借鑒和推廣的。