打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
VBA SQL,让高级筛选更简单

本文转载自公众号:Excel之家ExcelHome,作者:冥月*辰风。

初学Excel可能搞不清如何使用高级筛选,对于条件的描述一头雾水。

那么作为菜鸡代言人,今天就来一段以SQL方式进行多条件的筛选代码。

SQL,并不是那么遥不可及,最为一个弱鸡,我觉得基本的代码还是非常直观好用的。

【看数据源——截图】

先来看看数据:

假设我要选出Flight小于等于5,并且life小于9999的人,那么SQL语句应该是:

Select * from [Sheet1$A1:D7] where Flight<=5 and life<9999

(我放在sheet1,图中没截取出)

这里讲一点学习的经验,如果不知道语句什么意思,其实可以直接去翻译,就能知道个大概。

比如这句,选择*(*一般是通配符全部)从表xxx,哪里是flight<=5,且life<9999的。

很简单,对吧?当然理解和写是两回事,不过不理解,哪里来的写呢,所以肯定要先去理解。

继续这个问题,既然是针对初学者,肯定不知道如何连接,如何完整的读写。没关系,我已经写好了。

来看具体代码:

Sub 高级筛选()

On Error GoTo 10

Dim InputRg As Range, OutputRg As Range, Mysql$, Conditions$, Del_More$

    Set InputRg = Application.InputBox('输入筛选的区域', , , , , , , 8)

    Set OutputRg = Application.InputBox('输入输出的位置', , Selection.Address, , , , , 8)

    Conditions = Application.InputBox('条件语句')

    If MsgBox('是否去重', vbYesNo, '是否去掉重复项') = vbYes Then Del_More = 'Distinct ' Else Del_More = ''

    Set cnn = CreateObject('ADODB.Connection')

    cnn.Open 'provider=microsoft.ACE.oledb.12.0;extended properties=excel 12.0; data source=' & ActiveWorkbook.FullName  

    Mysql = 'Select ' & Del_More & '* From [' & InputRg.Worksheet.Name & '$' & Replace(InputRg.Address, '$', '') & '] Where ' & Conditions

    OutputRg.Worksheet.Range(OutputRg.Address).CopyFromRecordset cnn.Execute(Mysql)

    cnn.Close

    Set cnn = Nothing

10: End

End Sub

看一下动画演示吧:


运行代码,只要选择输入输出区域,以及写一个相对直观的判断语句就行。

比如 Flight<=5 and life>999 那么你将选择到老司机。用OR也是可以的,就像用if那样的概念去写就可以,试几次就知道了。

搞定收工。

本文由公众号 Excel创世纪合伙人 友情推荐

作者:冥月※辰风

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【VBA实例029】使用数组数据排序
ORACLE分页查询SQL语法——最高效的分页
八仙过海——提取指定条件的不重复值
精妙sql
第八节 SQL语句 4
sql语句
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服