如下图1所示,在名为“工作簿1.xlsm”的工作簿的工作表Sheet1中,标题为“StartDate”的列有一系列日期,但其中有很多重复的日期,现在要对其进行筛选,获取不重复日期,示例结果如图1中的列C所示。Sub GetDates()
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adCmdText = &H1
Dim cn As Object, rs As Object
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & ThisWorkbook.FullName & ";" & _
"Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text"""
rs.Open "SELECT DISTINCT [Sheet1$].[StartDate] FROM [Sheet1$] WHERE NOT [Sheet1$].[StartDate] IS NULL", cn, adOpenStatic, adLockOptimistic, adCmdText
Worksheets("Sheet1").Range("C2").CopyFromRecordset rs
rs.MoveFirst
Do While Not rs.EOF
Debug.Print rs(0)
rs.MoveNext
Loop
End Sub
上面的代码可供有兴趣的朋友研究,主要是在VBA中运用了数据库技术。其实,不用那么麻烦,几行代码就可以搞定。代码如下:Sub FilterDates()
Worksheets("Sheet1").Range("A:A").Copy Worksheets("Sheet1").Range("C1")
Application.CutCopyMode = False
Application.DisplayAlerts = False
Worksheets("Sheet1").Range("$C:$C").RemoveDuplicates Columns:=1, Header:=xlYes
Application.DisplayAlerts = True
End Sub
当然,不喜欢使用VBA的朋友,如果使用新版本的Excel,一个简单公式即可搞定:注:本文学习整理自vbaexpress.com,供有兴趣的朋友参考。欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。
欢迎到知识星球:完美Excel社群,进行技术交流和提问,获取更多电子资料,并通过社群加入专门的微信讨论群,更方便交流。