前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VBA示例程序:筛选并获取不重复日期

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

作者头像
fanjy
发布2024-05-13 16:08:54
1020
发布2024-05-13 16:08:54
举报
文章被收录于专栏:完美Excel完美Excel

标签:VBA

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

打开VBE,插入一个标准模块,在其中输入代码:

代码语言:javascript
复制
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

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

上面的代码可供有兴趣的朋友研究,主要是在VBA中运用了数据库技术。

其实,不用那么麻烦,几行代码就可以搞定。代码如下:

代码语言:javascript
复制
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,一个简单公式即可搞定:

=UNIQUE(A2:A9,FALSE)

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

欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-05-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档