专栏名称: 完美Excel
Excel与VBA技术学习与实践
目录
相关文章推荐
亿邦动力  ·  当“北雪南移”,雪场是门好生意吗? ·  昨天  
亿邦动力  ·  金蛇灵韵舞银花,斗罢艰险又出发 ·  4 天前  
电商技术每天分享  ·  2025年高级会员开始招募啦! ·  4 天前  
电商技术每天分享  ·  2025年高级会员开始招募啦! ·  4 天前  
电商报Pro  ·  美团王兴做了一个小红书 ·  4 天前  
电子商务研究中心  ·  灵蛇献瑞 “巳巳”如意 ... ·  4 天前  
51好读  ›  专栏  ›  完美Excel

VBA示例程序:筛选并获取不重复日期

完美Excel  · 公众号  ·  · 2024-05-12 13:55

正文

学习Excel技术,关注微信公众号:
excelperfect

标签:VBA

如下图1所示,在名为“工作簿1.xlsm”的工作簿的工作表Sheet1中,标题为“StartDate”的列有一系列日期,但其中有很多重复的日期,现在要对其进行筛选,获取不重复日期,示例结果如图1中的列C所示。

1
打开VBE,插入一个标准模块,在其中输入代码:
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 LoopEnd Sub

运行后的结果如上图1中列C所示。

上面的代码可供有兴趣的朋友研究,主要是在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 = TrueEnd Sub

当然,不喜欢使用VBA的朋友,如果使用新版本的Excel,一个简单公式即可搞定:

=UNIQUE(A2:A9,FALSE)

注:本文学习整理自vbaexpress.com,供有兴趣的朋友参考。

欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。
欢迎到知识星球:完美Excel社群,进行技术交流和提问,获取更多电子资料,并通过社群加入专门的微信讨论群,更方便交流。