您可以编写一个宏来Range.RemoveDuplicates
重复您的列表,然后Like
或正则表达式(请参阅我在Parsing String Mixed with HTML, Words, Numbers, and Dates中发布的代码)在剩余单元格的循环中检查单元格是否符合您的要求标准并删除那些不匹配的。
去重然后匹配可能会更有效,但你可以做任何一种方式。
如果您是 VBA 新手并且想要一些代码,请添加评论,我会发布一些。
编辑:
您需要进入 Visual Basic 编辑器 (Alt-F11),选择菜单项 Tools/References...,找到并选中“Microsoft VBScript Regular Expressions 5.5”,然后单击 OK。然后在项目资源管理器 (Ctrl-R) 中,右键单击VBA Project
您的工作簿和Insert
> Module
。
添加以下代码:
Public Function RegEx(strInput As String, strRegEx As String, Optional bIgnoreCase As Boolean = True, Optional bMultiLine As Boolean = False) As Boolean
Dim RegExp As VBScript_RegExp_55.RegExp
Set RegExp = New VBScript_RegExp_55.RegExp
With RegExp
.MultiLine = bMultiLine
.IgnoreCase = bIgnoreCase
.Pattern = strRegEx
End With
RegEx = RegExp.test(strInput)
Set RegExp = Nothing
End Function
(如果您认为以后可能会用到,可以添加Parsing String Mixed with HTML, Words, Numbers, and Dates中的其他正则表达式代码)
添加以下代码(假设要删除的数据在 A 列中):
Public Sub DedupeAndFilter()
Dim RCtr As Long
ActiveSheet.Range("A:A").RemoveDuplicates Columns:=1, Header:=xlNo
For RCtr = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
If ActiveSheet.Range("A:A").Rows(RCtr).Text = "" Then
ActiveSheet.Range("A:A").Rows(RCtr).Delete xlShiftUp
ElseIf Not RegEx(ActiveSheet.Range("A1").Rows(RCtr), "[A-Z]{2}-\d\d", True) Then
ActiveSheet.Range("A:A").Rows(RCtr).Delete xlShiftUp
End If
Next
End Sub
然后,将光标放在DedupeAndFilter
代码块中,按F5
或单击绿色的 Run ">" 三角形。然后,代码将从 A 列中删除重复项、空白单元格和不合格的单元格。
如果要更改受影响的列,请将“A:A”更改ActiveSheet.Range("A:A")
为任何其他列引用,或替换Activesheet.Selection
并选择所需的列。