oracle查询两列合并成一列_利用vba查询/抓取 外部数据

80ca28c6a7acaa48659ea46538036a23.png

考虑这么一个excel文件,路径为:"E:dataEdata.xlsx",样式如封面图片所示

想要在其他excel文件中,通过代码直接抓取Edata.xlsx中想要的数据,做法如下:

  • 先在Visual Basic中勾选“工具-引用-Microsoft ActiveX Data Objects”
  • 然后在下面的壳子中写入代码
Sub 抓取外部表格数据

注意!!!以下代码都要放在这个壳子中才能生效

单个表全部抓取

Range("a2").CopyFromRecordset conn.Execute("select * from [data1$]") 
这段代码的前半段是指 【将数据抓取到当前的单元格】中
核心是后半段,conn.Execute() 是必要的函数,先不管它
select * from [data$]:* 表示将sheet:data中的所有数据(除表头)抓取出来;$跟在sheet名后面,作为excel表的标记

为了看起来简洁,可以这样定义:

Dim sql As String
sql = "select * from [data1$]"
Range("a2").CopyFromRecordset conn.Execute(sql)

只抓取某几行

如果只想获得部分数据,比如 姓名/性别 两列,代码写为:

sql = "select 姓名,性别 from [data1$]"
Range("a2").CopyFromRecordset conn.Execute(sql) 

很朴素的语言逻辑

有条件的抓取

sql = "select * from [data1$] where 性别 = '男' "
Range("a2").CopyFromRecordset conn.Execute(sql) 

合并抓取多个表

我们注意到表data1和data2是同一种格式的表格,如果同时想要两个表的内容呢?如何把他们同时抓取并放到一起呢?

sql = "select * from [data1$] union all select * from [data2$]"
Range("a2").CopyFromRecordset conn.Execute(sql) 
union all 可以把两个表上下连接起来

类VLOOKUP查找

可以注意到data3中有前两表没有的【月薪】一列,他们之间可以靠【姓名】对应起来。那么可不可以像Excel中的VLOOKUP函数一样,通过姓名把他们的月薪查找出来呢?

sql = "select * from [data1$] left join [data3$] on [data1$].姓名 = [data3$].姓名"
Range("a2").CopyFromRecordset conn.Execute(sql)
left join on 函数

结果会变成这个样子,多出现了一列姓名:

3a05428e7348892b009044ec15fe52f2.png

这就反应出了left join on 的特点,它是先把后面的两个表合并,然后对合并后的表做select。下图中黄色部分的格式就是上图中的样子。

2d585164ce68267633815d566cdb640b.png

如果想更好的显示,就要对代码进行修改:

sql = "select [data1$].姓名,性别,年龄,月薪  from [data1$] left join [data3$] on [data1$].姓名 = [data3$].姓名" 
Range("a2").CopyFromRecordset conn.Execute(sql)

把三个表结合到一起

先UNION ALL 再 LEFT JOIN ON

sql = "select a.姓名,性别,年龄,月薪 from (select * from [data1$] union all select * from [data2$])a left join [data3$] on a.姓名=[data3$].姓名"
Range("a2").CopyFromRecordset conn.Execute(sql)

这段代码很长,让我们来捋一捋:

首先是将data1和data2(通过 union all 方法) 合并成一个表,用a表示
然后将表a和data3(通过 left join on方法)合并成一个表,根据姓名加入对应的月薪
对最终合并成的表提取 姓名,性别,年龄,月薪 这4列数据

cc7586a093f6c9d690655271e4062eb0.png

代码的逻辑如上图所示,黄色表示【data1】和【data2】union all之后的【表a】,黄色加蓝色就是【表a】和【data3】left join on后的表,select函数直接作用在这个表上。

得到结果为:

bde8d42f4845c726d0c83fae69a3f870.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值