馬紅旭
【摘要】 文章討論的問題是對具有龐大數據量的Excel電子表中出現的重復記錄,提出了有效的標記和刪除辦法。
【關鍵詞】 Excel重復數據記錄 標記 刪除
引言
在對數據量比較龐大的Excel電子表維護過程中,我們以管理學校學籍數據信息為例,經常會遇到這樣一個問題,就是需要查找出同一個工作簿內多個不同工作表中,學號、姓名或者其它字段相同的重復記錄。要求先把它們顯示出來,然后再用人工或自動方法進行刪除。由于數據量很大,人工查找刪除又費時費力,而簡單合并成一個工作表又有可能造成數據混亂,所以,這里我們將給出Excel整理重復數據記錄的方法。
一、Excel數據源備份
為防止數據丟失,可以先插入若干工作表,復制數據源所有數據在這些表中,使數據源得到備份。
二、查找、標記重復記錄
打開工作表數據,我們可以根據電子表中每個字段名,逐列排查重復記錄。這里以檢測A列為例,首先在A列右側先插入一列,得到B列作為標記列,然后在B1單元格中輸入公式:=IF(ROW()=MATCH(A1,A:A,0),1,”重復”),函數MATCH的作用是對整個A列(A:A)進行查找,如果第一次查找到A1值,則使對應B1單元內容等于1,如果是第二次或第N次查找到A1值,則在右側B列標記列對應單元中寫入“重復”字樣。
然后按照記錄個數需要,向下拖動B1單元右下角的復制句柄,使B2、B3…Bn得到相應的值,Bn單元格中公式內容為:=IF(ROW()=MATCH(An,A:A,0),1,”重復”),其中An依次代表A1到An單元的值。
而公式中A:A表示檢測整個A列,這里應該注意A列數據應盡量不為空。如果是A列某一段區(qū)域,用戶還可以根據需要自行修改,比如寫成A2:A10,表示只檢查A2到A10單元的數據有沒有重復。
這時再仔細觀察新的標記列B列所有數據,它們的值分別為1或者“重復”字樣,具有“重復”字樣的記錄,就是我們標記的多余重復記錄,稍后需要用戶刪除。
當然,我們還可以使用COUNTIF()函數,在B1單元格中輸入公式:=IF(COUNTIF(A$2:A6,A6)>1,”重復”,1),再依據A列記錄個數的需要向下拖動B1單元格右下角的復制句柄,同樣可以達到查找、標記重復記錄的目的,這兩種標記方法既簡單又非常有效。
三、刪除帶有重復標記的所有記錄
經過上述處理之后,所有多余的重復記錄就都被我們標記出來了,接下來的任務是把所有帶“重復”標記的記錄刪除。由于手工刪除工作量可能太大,又容易出錯,所以這里我們啟動vba,運行如下程序,讓計算機對默認工作表sheet1自動完成刪除多余記錄的任務。
Sheet1刪除重復記錄程序代碼如下:
Subrt()
DimiAsInteger
Fori=10To1Step-1i初值可以取其它值
IfApplication.WorksheetFunction.CountIf(
Cells(i,2),”重復”)ThenRows(i).Delete
‘查找同行B列中等于‘重復值,找到則刪除該行記錄
Nexti
End
另外,稍加修改上述程序,我們就可以對同一個工作簿中其它張工作表(以sheet3為例)中的重復記錄,進行相同的刪除操作。該程序中還考慮到個別復雜情況下,用戶有可能對工作表中若干列都進行過重復記錄標記工作,其中某幾列同時做過標記才能刪除,這里用戶只需要修改if語句中邏輯表達式即可完全任務。至此,工作表中所有多余記錄都被刪除,最后刪除標記列B列。
程序代碼如下:
Subrt()
DimiAsInteger
Fori=10To1Step-1循環(huán)
IfSheet3.Cells(i,4)=”重復”AndSheet3.Cells(i,5)=”重復”ThenSheet3.Rows(i).Delete
‘查找sheet3中同行第4列和第5列同時等于“重復”字樣,找到則刪除該行記錄
Nexti
EndSub
四、綜述
利用上述方法,我們把Excel所有重復數據記錄找出并刪除了,問題得到解決,該方法省時省力,安全高效,對于大型工作表數據維護的意義非常重大。
參 考 文 獻
[1]譚浩強等編著.VisualBasic語言教程[M].北京:電子工業(yè)出版社,2000.10
[2]周維武等編著.計算機基礎教程(第3版)[M].北京:電子工業(yè)出版社,2008.
[3]李飛,廖琪梅,何鑫主編.計算機應用新教程[M].西安:西安電子科技大學出版社,2004.