ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何高效的将“表2”中的部分数据更新到“表1”?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-7-12 19:54 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
各位大神!!!
附件EXCEL文件中有2个工作表

①表1是原始数据
②表2的C列、D列是从表1中读取的原始数据
③表2的E列、F列是从最新的数据(最新的价格 和 价格更新的日期)
④表2的G列 是C列 与 E列 数据比对的结果(深粉色为比对结果有差异)


问题:
如何将表2中,G列中出现数据差异,对应的E列的数据(表格中标注了黄色数据),更新到表1中?

image.png

更新前置条件:
①G列中出现数据差异(如表2种序号1、2、4),才需要更新表1 A列中对应货号的D列(PRICE)

数据更新要求:
①在表1中A列中,找到表2中B列的货号
②将到表2中该货号对应的E列的“PI价格”,更新到表1该货号对应D列“PRICE”
③将到表2中该货号对应的E列的“PI日期”,更新到表1该货号对应E列“PRICE Updated”

image.png

List.rar

8.37 KB, 下载次数: 6

TA的精华主题

TA的得分主题

发表于 2023-7-12 20:17 | 显示全部楼层
参与一下。

List.zip

18.08 KB, 下载次数: 11

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-7-12 22:31 | 显示全部楼层
用到left join与iif
GIF 2023-07-12 22-30-27.gif

List.zip

19.5 KB, 下载次数: 8

TA的精华主题

TA的得分主题

发表于 2023-7-12 22:46 | 显示全部楼层
Sub limonet()
    Dim Cn As Object, StrSQL$, Rst As Object, i%
    Set Cn = CreateObject("adodb.connection")
    Cn.Open "provider=microsoft.ace.oledb.12.0;extended properties='excel 12.0;HDR=NO';data source=" & ThisWorkbook.FullName
    StrSQL = "select a.*,b.f5 as f8,b.f6 as f9 from [表1$A2:G]a left join [表2-新价格更新到表1$A2:G]b on a.f1=b.f2"
    StrSQL = "select f1,f2,f3,iif(f8 is null,f4,f8),iif(f9 is null,f5,f9),f6,f7 from (" & StrSQL & ")"
    Range("A2").CopyFromRecordset Cn.Execute(StrSQL)
End Sub

TA的精华主题

TA的得分主题

发表于 2023-7-12 23:06 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
感觉表2 E、F列数据是手动操作的吧,添加或修改表2 E、F列数据,自动修改表1对应数据

List.rar

15.06 KB, 下载次数: 2

TA的精华主题

TA的得分主题

发表于 2023-7-12 23:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
limonet 发表于 2023-7-12 22:31
用到left join与iif

知识所限,老师的代码完全看不懂了,但效果一样,但同时也发现一个问题,就是第一次点击按钮,表2的E列价格列会变成日期格式,表1、表2显示正常。第二次点击,表1和表2改变过数据的行又会出现新的数据变化,表2的G列价格差的相关行会显示1,然后再点击按钮,就不在出现变化。如何可以修正这种现象,谢谢!

TA的精华主题

TA的得分主题

发表于 2023-7-13 09:36 | 显示全部楼层
  1. Sub 比较()

  2. Set d = CreateObject("scripting.dictionary")
  3. arr = Sheets("表2-新价格更新到表1").UsedRange
  4.     For i = 2 To UBound(arr)
  5.         If arr(i, 2) <> "" Then
  6.             If arr(i, 3) <> arr(i, 5) Then
  7.                 d(arr(i, 2)) = Array(arr(i, 5), arr(i, 6))
  8.             End If
  9.         End If
  10.     Next i
  11. brr = Sheets("表1").UsedRange
  12.     For i = 2 To UBound(brr)
  13.         If d.exists(brr(i, 1)) Then
  14.             brr(i, 4) = d(brr(i, 1))(0)
  15.             brr(i, 5) = d(brr(i, 1))(1)
  16.         End If
  17.     Next i
  18. Sheets("表1").UsedRange = brr

  19. Set d = Nothing
  20. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-7-13 09:44 | 显示全部楼层
limonet 发表于 2023-7-12 22:31
用到left join与iif

请教下,left join,是保留表1的全部记录,还是表2的全部记录,不记得了

TA的精华主题

TA的得分主题

发表于 2023-7-13 10:18 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-7-13 10:26 来自手机 | 显示全部楼层
LIUZHU 发表于 2023-7-13 09:44
请教下,left join,是保留表1的全部记录,还是表2的全部记录,不记得了

表1的全部记录
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 04:51 , Processed in 0.038931 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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