VBA和SQL相结合,感觉走上了数据处理的巅峰之路「建议收藏」

VBA和SQL相结合,感觉走上了数据处理的巅峰之路「建议收藏」Excel VBA 8.7听说SQL很强大,不打开文件的情况下获取唯一值VBA和SQL相结合,感觉走上了数据处理的巅峰之路

欢迎大家来到IT世界,在知识的湖畔探索吧!

前景提要(文末提供源码下载)

前前后后关于获取数据唯一值的方法,我也是分享了有好几种了,不知道小伙伴们有没有中意的呢?其实在分享的过程中,有很多的小伙伴们也是提供了很多不同的方式,今天我在分享一种大家没有提到的方法,SQL方法,接触过数据的小伙伴们一定非常的熟悉SQL了,其实方法有很多种,根据大家自己手上的资源和所掌握的知识的不同,要延伸出来的话,有很多方法,这里我们秉着从VBA的角度出发来学习VBA的前提,尽可能多的丰富大家的处理方法,同时学习一些新的知识

场景说明

VBA和SQL相结合,感觉走上了数据处理的巅峰之路「建议收藏」

这里我们还是利用之前的案例场景,这次我们使用的是SQL方法,可以实现的好处就是再不打开工作表的情况下,就可以将工作表的数据去重并返回结果给我们,当数据比较大的时候,这个方法的好处是非常的明显的。

代码区

为了验证我们并不需要打开原始数据数据,这里我们新建一个新的工作簿。并且将这两个工作簿放在同一个文件夹内部,方面我们的调用的

首先我们来尝试下通过SQL的方法来实现单列数据的唯一值的获取,这里我们来获取姓名列

Sub 单列()
Set conn = CreateObject("adodb.connection") 
Set Rst = CreateObject("ADODB.recordset") 
conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;extended properties=excel 12.0;data source=" & ThisWorkbook.Path & "/8-6.xlsm"
Dim sql As String
sql = "Select DISTINCT 姓名 from [sheet1$] "
With ActiveSheet
.Range("a2:i100") = ""
 Set Rst = conn.Execute(sql)
 For i = 0 To Rst.Fields.Count - 1 
 .Cells(1, i + 1) = Rst.Fields(i).Name
 Next i
 .Range("a2").CopyFromRecordset conn.Execute(sql)
End With
conn.Close
Set conn = Nothing
End Sub

欢迎大家来到IT世界,在知识的湖畔探索吧!

很多熟悉SQL的小伙伴们一定会觉得比较的好奇,为什么会有这么多的代码,SQL中获取唯一值只需要简简单单的一句话!

说到底,SQL虽然强大并且快,但是他并不能够直接在VBA中使用,和字典以及其它方式一样,还是需要通过声明,调用的方式来获得。

先来看看效果。

VBA和SQL相结合,感觉走上了数据处理的巅峰之路「建议收藏」

这里我们可以看到,在不需要但单独打开工作表的情况下,我们轻松的实现了姓名列唯一值的获取。

那么假设我们需要的是获取多列的唯一值呢?比方说所有数据的唯一值呢?

欢迎大家来到IT世界,在知识的湖畔探索吧!Sub sql()
Set conn = CreateObject("adodb.connection")
Set Rst = CreateObject("ADODB.recordset")
conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;extended properties=excel 12.0;data source=" & ThisWorkbook.Path & "/8-6.xlsm"
Dim sql As String
sql = "Select DISTINCT * from [sheet1$] "
With ActiveSheet
.Range("a2:i100") = ""
 Set Rst = conn.Execute(sql)
 For i = 0 To Rst.Fields.Count - 1
 .Cells(1, i + 1) = Rst.Fields(i).Name
 Next i
 .Range("a2").CopyFromRecordset conn.Execute(sql)
End With
conn.Close
Set conn = Nothing
End Sub
VBA和SQL相结合,感觉走上了数据处理的巅峰之路「建议收藏」

从结果来看,我们的数据是非常的完美,并没有任何的问题的。

代码解析

那么我们来看看在VBA中是如何使用SQL的吧,其实只要学会了使用方法,对于SQL很熟悉的小伙伴们就可能够扩展出更多的运用。

Set conn = CreateObject("adodb.connection")
Set Rst = CreateObject("ADODB.recordset")

首先老规矩,既然不能直接使用,那么肯定是需要先通过声明告诉系统我现在要调用SQL这个东西的。

欢迎大家来到IT世界,在知识的湖畔探索吧!conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;extended properties=excel 12.0;data source=" & ThisWorkbook.Path & "/8-6.xlsm"

既然已经声明了SQL,那么可能就需要有对象了,我们是要之前的8-6的数据源中得到数据的,那么自然要将这两个表链接在一起,如何链接呢?就是上面的代码,

在实际的使用中,大家只需要更改后面的一部分就可以了,即data source=“*******”这一部分的数据,这一部分代表的就是数据源所在位置。

VBA和SQL相结合,感觉走上了数据处理的巅峰之路「建议收藏」

然后就是最重要的SQL语句了

获取唯一值的方法就简单的一句话。

获取姓名列的唯一值

sql = "Select DISTINCT 姓名 from [sheet1$] "

整体所有数据的唯一值

sql = "Select DISTINCT * from [sheet1$] "

因为SQL的方法并不是我们本章节的主体,这里我们就暂时简单的介绍下SQL在VBA中的运用,给大家提供一个思路,一个方法。具体的使用方法以及SQL的各种常用组合,我们会在后面的章节中慢慢张开。

================================

本节课的案例源码已经上传,需要的小伙伴请按照如下步骤操作,一个不能少哦~~

1.转发下本文章(算是对我的小小支持吧~)

2. 点我头像加个关注~

3.后台私信“8-7-7”

希望大家多支持~~,多多关注 ~ ~

好了,明晚19:00,准时再见!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/17931.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信