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
運行后: