《VBA代碼解決方案》(版權10028096)這套教程是我最早推出的教程,目前已經是第三版修訂了。這套教程定位于入門后的提高,在學習這套教程過程中,側重點是要理解及掌握我的“積木編程”思想。要靈活運用教程中的實例像搭積木一樣把自己喜歡的代碼擺好。
這套教程共三冊,一百四十七講,內容覆蓋較廣,也是初級和中級間的過渡教程,改版后的內容主要是提供程序源碼文件及代碼修正為32位和64位兼用代碼。今后一段時間會給大家陸續推出。今日的內容是VBA代碼解決方案第二十四講:EXCEL中,如何刪除重復數據行
【分享成果,隨喜正能量】129 愛出者愛返,福往者福來。懷揣一顆善良的心,本本分分,坦坦蕩蕩,多去幫助需要的人,堅持善良做人,才能不負于人,不負自己。。
第二十四講 EXCEL中,如何刪除重復數據行
各位好,今天開始講VBA代碼解決方案的二十四講:在EXCEL中,如何借助于代碼來完成刪除重復行的工作。在實際的工作中這個工作是經常用到的,判斷有沒有重復的數據,是EXCEL數據統計中非常重要的工作的工作之一,也是經常處理的工作之一。如果掌握了這個技巧,無形中會提高自己的工作效率,而且還可以提高工作的準確性。
1 應用場景的具體分析及Countif函數
實例:在實際應用中,可能需要刪除工作表中A列的重復內容而只保留一行,如何來解決這個問題呢?可以借助工作表CountIf函數來完成. 我們先來講解一下Countif函數.
- Countif函數: 是Microsoft Excel中對指定區域中符合指定條件的單元格計數的一個函數,在WPS,Excel2003和Excel2007等版本中均可使用。
語法規則如下:countif(range,criteria)
參數:
a) range 要計算其中非空單元格數目的區域
b) criteria 以數字、表達式或文本形式定義的條件
2 刪除重復數據行的代碼及代碼解讀
在講解完這個函數后,我們來看代碼:
Sub mynz_24() '第24講 EXCEL中,如何刪除重復數據行
Dim r As Integer
Dim i As Integer
With Sheets("24")
r = .[A65536].End(xlUp).Row
For i = r To 1 Step -1
If WorksheetFunction.CountIf(.Columns(1), .Cells(i, 1)) > 1 Then
.Rows(i).Delete
End If
Next
End With
End Sub
代碼截圖:
代碼解析:mynz_24過程刪除工作表A列重復單元格所在的整行內容,只保留一行。
1) 第5行代碼取得工作表中A列的最后一個非空單元格的行號,要注意Range對象的End屬性。不知讀者是否已經掌握。
2) 第6行到第10行代碼從最大行數至最小行數循環判斷A列單元格內容是否重復并刪除重復單元格所在的整行。和上一講一樣,此處For...Next循環也要從最大行數至最小行數開始循環判斷,否則可能會刪除不凈。
3) 其中第7、8行代碼使用工作表CountIf函數判斷單元格內容是否重復,如果重復則刪除該單元格所在的行。
- [A65536] 適用于低版本Excel,如果是高版本,可以替換為[A1048576],一般情況,即使是[A65536]也足矣,如有特殊情形,學員要注意更改,也可以用通用模式Rows.Count代替,學員要注意。
運行前mynz_24過程工作表區域下截圖:
運行后的截圖:
運行的結果后,可以看到和預想的一樣。
今日內容回向:
1 刪除工作表中重復數據的思路是什么?
2 COUNTIF 的意義是什么?
3 上面代碼中.Columns(1)的意義是什么?
本講內容參考程序文件:VBA代碼解決方案(22-26).xlsm
我20多年的VBA實踐經驗,全部濃縮在下面的各個教程中: