Excel SQL+VBA实现不打开工作薄进行筛选和提取!

Excel SQL+VBA实现不打开工作薄进行筛选和提取!

转自:Excel和VBA

前景提要

不打开工作薄如何筛选?结果另外保存起来!

数据查找最快的还是SQL!那VBA能用吗?

SQL+VBA实现不打开工作薄进行筛选和提取,真香

最近一段时间我们都是在分享单元格内容的查找,不管是单元格内容的精确查找,还是单元格内容的模糊查找,也不管是倒序查找还是正序查找,这些查找的前提都是工作薄已经打开的情况下。

随着现在数据量不断的增加,Excel表格的体积也是越来越大,每次打开都需要耽误不少的时间,等打开了工作薄之后,还是进行数据的筛选,在数据量比较大的情况下,数据的筛选也是非常浪费时间的,那么怎么办呢?

所以我们今天来实现一个功能,在不打开工作薄的情况下进行数据筛选

场景说明

006fRELkly4gqj84u21kjj30jg05c74a

这是我们当前的一个模拟的场景,同一个文件夹内有一个测试的excel文件

006fRELkly4gqj84u2lxij30ft0ccjr8

测试文件内,有打开8000+的数据,我们现在要在不打开这个工作薄的情况下,从这个工作表中进行筛选

从其中筛选出总分这一列大于90的所有人的数据

来看看要如何实现!

代码区

Sub test()

Set conn = CreateObject("adodb.connection")

Set Rst = CreateObject("ADODB.recordset")

Dim sql As String

sql = "Select * from [B班$] Where总分> 90"

With ActiveSheet

.Range("a1:i100") = ""

conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;extended properties=excel 12.0;data source=" & ThisWorkbook.Path & "/测试.xlsx"

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

又是不打开工作薄,又是SQL,说了那么多,但是感觉代码也不是很难,一起来看看效果

直接来看看效果

006fRELkly4gqj84u3357j30jg0eodgi

成功的实现了效果,并且速度还是很快的。

代码解析

从结果上来看,代码成功的实现了在打不开工作薄的情况下,将工作薄中符合条件的数据都筛选出来了,非常的完美。

来看看代码

当我们听到在不打开工作薄的时候,要从工作表中获得数据的话,一般的VBA思路都没有办法实现的。

这个时候我们必须使用SQL

那么在VBA中,要如何使用SQL呢?

Set conn = CreateObject("adodb.connection") '创建ado对象

Set Rst = CreateObject("ADODB.recordset") '创建记录集

这里我们也不需要这两句话的意思,直接理解为,是VBA调用SQL的起手式。

那SQL最重要的是什么呢?

那就是SQL语句了。

我们今天要实现的条件是总分>90

那么如何写呢?

sql = "Select * from [B班$] Where总分> 90"

熟悉SQL的小伙伴可能会觉得,这个SQL和常规的SQL似乎有那么一点点不同。

没错,VBA中SQL的使用是有一点小区别的,或者可以说不同的编程语言针对SQL语句或多或少都会有一点小差异的

这里我们重点理解下这个SQL语句

select * from就是SQL的筛选的意思

从什么地方筛选呢?

006fRELkly4gqj84u1jbij30jg0ewaag

另外一个工作博当中工作表名称为B班的工作表中获取数据

所以是Select * from [B班$]

006fRELkly4gqj84u1pk5j30jg0cpt9o

注意,这里的B班后面一定要加上$和[ ]

那么有了筛选的地方,那么筛选条件呢?

where后面跟随的就是筛选条件

006fRELkly4gqj84u686sj30d70bvglh

非常的简单,好理解。

conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;extended properties=excel 12.0;data source=" & ThisWorkbook.Path & "/测试.xlsx"

这里也是SQL的另外一个组成部分,他的作用是告诉vba,sql要筛选的文件的位置。

这里我们先简单了解下,这种固定模式的写法,就是从当前文件夹里面找到测试.xlsx这个文件进行筛选。

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)

这里后米的这部分也算是固定模式了,大家这里先直接套用就好。

如果大家有其他的方法,或者想要知道哪方面的办公技巧,下方评论哦~

学习资料见知识星球。

以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。

快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利​​​​!

更多技巧, www.excelbook.cn

欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;

2022021703525891-188

你将获得:

1、价值上万元的专业的PPT报告模板。

2、专业案例分析和解读笔记。

3、实用的Excel、Word、PPT技巧。

4、VIP讨论群,共享资源。

5、优惠的会员商品。

6、一次付费只需99元,即可下载本站文章涉及的文件和软件。

文章版权声明 1、本网站名称:Excelbook
2、本站永久网址:http://www.excelbook.cn
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长王小琥进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报。
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。

THE END
分享
二维码
< <上一篇
下一篇>>