本文的目的是想讨论一下在vba用不同的方法实现查询在A表而不在B表的内容,以及比较各个方法的效率。主要涉及的方法是字典+数组,SQL语句中的notexists及left join.
运行环境:EXCEL版本Microsoft EXCEL 2016,win10 32位
文章涉及内容如下:
一、需求
二、实现思路
三、SQL语句
1.not exists 2.left join 3.not in四、数组与字典
五、比较与总结
一、需求
这一次的内容来源于一个VBA群里面的一个提问,需求是在一份记录总表里面查询某个月的新增用户的手机号码。记录明细有两列,一列是时间,一列是手机号,原来数据是在数据库上的,为了提供测试数据源才转到EXCLE的。当时因为上班时间,也没细看,最近无聊的时候回想起这个,觉得有意思,又找出来学习下。
数据源只有2列,共14037行。
二、实现思路
实现这个需求的思路挺简单的,
1、 获取某月份所有出现的号码
2、 获取非该月份出现的号码
3、 判断在1结果又不在2结果中即想要得到的结果了。
这里以6月份为例子,用下面两种方法实现。
三、SQL语句
既然提问是用sql语句,我们这里也先讨论这个。(本文不涉及sql语句基础,只是稍微提及涉及的知识点)
实现步骤1,2的语句分别如下。
strSQL1 = "select distinct 手机号 from [记录明细$] where 结束时间 >= #" & t1 &"# and 结束时间< #" & t2 &"#"
strSQL2 = "select distinct 手机号 from [记录明细$] where 结束时间