ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1795|回复: 11

[原创] 相同结构的两个表数据合并,相同关键字对应的值更新,不相同则追加

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-12-11 16:25 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
各位大神好,
本有有一个问题困扰已久,一直没有成功。请各位看看如何实现:

有A、B两个表,抬头结构完全相同,以C列为关键字,用A表的数据来更新B表,
1、如果A表中C列的值与B表C列的值相同,则用A表对应的J列数据更新B表对应J列的值;
2、对于其他A表中C列的值其他的值(与B表C列的值都不相同),则整行追加到B表里面;

相当于将A表以C列为关键字覆盖更新到B表中,有相同的值则更新对应的值,没有的追加进来。
希望将代码放在单独的表中,运行后自动将更新的A表另存成C结果文件。


自己试了好久都没解决,请各位老师指点。
谢谢

图片.jpg

更新覆盖.rar

23.45 KB, 下载次数: 6

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-12-12 12:08 来自手机 | 显示全部楼层
大神们啊,版主啊,给指点一下啊

TA的精华主题

TA的得分主题

发表于 2021-12-12 17:18 | 显示全部楼层
  1. Sub test1()
  2.   
  3.   Dim p As String, f
  4.   Dim Cnn As Object, Rst As Object, Sql As String
  5.   Dim i As Long, ky As String, s As String, t As String
  6.   
  7.   Set Cnn = CreateObject("ADODB.Connection")
  8.   Cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 XML;Data Source=" & ThisWorkbook.FullName
  9.   
  10.   Cells.Clear
  11.   
  12.   p = ThisWorkbook.Path & "\"
  13.   f = Array("A.xlsx", "B.xlsx", "C.xlsx")
  14.   
  15.   Set Rst = Cnn.Execute("SELECT * FROM [Excel 12.0;Database=" & p & f(1) & "].[$A1:J] WHERE FALSE")
  16.   For i = 0 To Rst.Fields.Count - 2
  17.     t = Rst.Fields(i).Name
  18.     s = s & "a." & t & ","
  19.     Range("A1").Offset(0, i) = t
  20.     If i = 2 Then ky = t
  21.   Next
  22.   t = Rst.Fields(i).Name
  23.   s = s & "b." & t
  24.   Range("A1").Offset(0, i) = t
  25.   
  26.   Sql = "SELECT " & s & " FROM " & _
  27.     "[Excel 12.0;Database=" & p & f(1) & "].[$A1:J] a" & _
  28.     " LEFT JOIN " & _
  29.     "[Excel 12.0;Database=" & p & f(0) & "].[$A1:J] b" & _
  30.     " ON a." & t & "=b." & t
  31.   Set Rst = Cnn.Execute(Sql)
  32.   Range("A2").CopyFromRecordset Rst
  33.   
  34.   Sql = "SELECT DISTINCT " & ky & " FROM [Excel 12.0;Database=" & p & f(1) & "].[$A1:J] WHERE LEN(" & ky & ")"
  35.   Sql = "SELECT * FROM [Excel 12.0;Database=" & p & f(0) & "].[$A1:J] WHERE " & ky & " NOT IN (" & Sql & ")"
  36.   Set Rst = Cnn.Execute(Sql)
  37.   Range("C65536").End(xlUp).Offset(1, -2).CopyFromRecordset Rst
  38.   
  39.   If Dir(p & f(2)) <> "" Then Kill p & f(2)
  40.   Cnn.Execute "SELECT * INTO [" & p & f(2) & "].[Sheet1] FROM [" & ActiveSheet.Name & "$]"
  41.   
  42.   Set Rst = Nothing
  43.   Cnn.Close
  44.   Set Cnn = Nothing
  45.   Beep
  46. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2021-12-12 17:19 | 显示全部楼层
本帖最后由 xiangbaoan 于 2021-12-12 18:18 编辑

更新覆盖1.zip (43.15 KB, 下载次数: 5)

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-12-12 17:42 | 显示全部楼层
本帖最后由 rkrkrk123 于 2021-12-12 17:58 编辑

大佬你好,我刚才试了,不行啊结果 只把A里面新增的C列 对应的值查出来比如H9,但是并没有把其他的值查出来啊比如A1,A2,A3的J列值都为空,A1,A2,A3AB里面都有,应该是用A列值替换B的值,不应该为空。已改是 image.png


麻烦再看看啊

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-12-12 18:05 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

谢谢指点。但是结果不对啊,
只把A表里H9 对应J列的值查询出来了,A1、A2A3的J列都是空的啊,应该是用A表里A1、A2A3的J列的值替换掉B表里对应的值


捕获.JPG

TA的精华主题

TA的得分主题

发表于 2021-12-12 18:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
rkrkrk123 发表于 2021-12-12 18:05
谢谢指点。但是结果不对啊,
只把A表里H9 对应J列的值查询出来了,A1、A2A3的J列都是空的啊,应该是用A ...

image.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-12-12 18:28 | 显示全部楼层

好的,谢谢。明天好好学习下。
另外,能否将结果J列的设置短日期格式,我不知道在哪调,我把ABJ列改为短日期了,但结果不是日期格式的,麻烦指点一下

TA的精华主题

TA的得分主题

发表于 2021-12-12 18:35 | 显示全部楼层
rkrkrk123 发表于 2021-12-12 18:28
好的,谢谢。明天好好学习下。
另外,能否将结果J列的设置短日期格式,我不知道在哪调,我把ABJ列改为短 ...

1、2、3……这类数字我调不成的。

TA的精华主题

TA的得分主题

发表于 2021-12-12 18:38 | 显示全部楼层
本来还想进修下vba调数据库的,现在我打消了这个念头
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-6-7 19:48 , Processed in 0.034865 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表