VBA RemoveDuplicates方法去重復項


RemoveDuplicates后邊必須跟參數否則不起作用

ActiveSheet.Range("G21:R36").RemoveDuplicates Columns:=12, Header:=xlYes

其中Columns參數指定要刪除重復項的列,如果是1的話,那么第一列中重復項所在行都會被刪除,如果是2則只有1,2兩列均重復的行才會被刪除,以此類推,你的區域12列,那么只有12列均重復的行會被刪除。

如果想在12列中只根據某幾列的重復來刪除,比如,1 3 7列。那么參數寫為Columns:=Array(1,3,7)

 

案例介紹:

1.  僅根據第1列重復項刪除整行

源表:黃色標記的都是重復項

 

VBA語句:

Option Explicit
Option Compare Text
Sub 去重()
    Dim sSheet As Worksheet
    Set sSheet = ActiveSheet
    sSheet.Range("A1:H25").RemoveDuplicates Columns:=1, Header:=xlYes
End Sub

或:個人推薦下面這種寫法

Option Explicit
Option Compare Text
Sub 去重()
    Dim sSheet As Worksheet
    Set sSheet = ActiveSheet
    sSheet.Range("A1:A25").EntireRow.RemoveDuplicates Columns:=1, Header:=xlYes
End Sub

 

 

運行后:

 

去重復項時忽略大小寫,示例

源表:

 

VBA語句:

Option Explicit
Option Compare Text
Sub 去重()
    Dim sSheet As Worksheet
    Set sSheet = ActiveSheet
    sSheet.Range("A1:H25").RemoveDuplicates Columns:=1, Header:=xlYes
End Sub

 

運行后:

 

RemoveDuplicates 方法去重規則總結:

a.去重時忽略大小寫

b.前或后帶空格的項卻不做為重復項,無法去重,見上面案例。----- 關於這一點,經驗驗證:WPS 2019 --- 數據 --- 刪除重復項 也是無法去除的,因此RemoveDuplicates 方法和工具菜單的方式去重是一樣的效果。

 

2. 僅根據第2列重復項刪除整行

源表:

 

VBA語句:

Option Explicit
Option Compare Text
Sub 去重()
    Dim sSheet As Worksheet
    Set sSheet = ActiveSheet
    sSheet.Range("A1:H25").RemoveDuplicates Columns:=2, Header:=xlYes
End Sub

 

或:sSheet.Range("A1:H25").RemoveDuplicates Columns:=Array(2), Header:=xlYes

 

運行后:

 

3.  僅根據第 1 和 2列 重復項刪除整行,能否生效?

源表:

VBA語句:

Option Explicit
Option Compare Text
Sub 去重()
    Dim sSheet As Worksheet
    Set sSheet = ActiveSheet
    sSheet.Range("A1:H25").RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes
End Sub

 

運行后:

 

發現沒有效果,重復項沒有去除掉!!

 

再示例: 要過濾的多列重復項 都處在同一行

源表:

 

VBA語句:

Option Explicit
Option Compare Text
Sub 去重()
    Dim sSheet As Worksheet
    Set sSheet = ActiveSheet
    sSheet.Range("A1:H25").RemoveDuplicates Columns:=Array(1, 3), Header:=xlYes
End Sub

 

運行后:

 

第1列的重復項和第3列的重復項 處於同行,才會去做移除操作,見上圖!

 

 

 

另:

http://www.amarindaz.com/excel-vba-remove-duplicates/    Excel VBA Remove Duplicates Method

Header- It determines whether the given range does contain header or not. User can specify three values in header parameter. They are shown below

Header:=xlYes- Choose this value if given range does contain Header

Header:=xlNo – Choose this value if given Range doesn’t contain header

Header:=xlGuess- Choose this value if you want excel to determine the existence of Header

 

示例1:Header:=xlYes

源表:

VBA語句:

Option Explicit
Option Compare Text
Sub 去重()
    Dim sSheet As Worksheet
    Set sSheet = ActiveSheet
    sSheet.Range("A1:H25").RemoveDuplicates Columns:=1, Header:=xlYes
End Sub

 

運行后:

第1列 與標題行重復項 沒有去除掉,其它行重復項已去除。

 

示例2:Header:=xlNo

源表:

VBA 語句:

Option Explicit
Option Compare Text
Sub 去重()
    Dim sSheet As Worksheet
    Set sSheet = ActiveSheet
    sSheet.Range("A1:H25").RemoveDuplicates Columns:=1, Header:=xlNo
End Sub

 

運行后:

 

發現與標題行重復項已去除!

 

示例3:Header:=xlGuess

源表:

VBA語句:

Option Explicit
Option Compare Text
Sub 去重()
    Dim sSheet As Worksheet
    Set sSheet = ActiveSheet
    sSheet.Range("A1:H25").RemoveDuplicates Columns:=1, Header:=xlGuess
End Sub

 

運行后:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM