ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助!两张表对比差异如何用VBA 快速提取到另一张表中。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-7-13 11:01 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
希望各路大神老师,给予帮助。在此拜谢
期望功能.:
用VBA代码进行对比盘点数量 与库存数量之间的差异
两张表对比以 【货号、条码、数量】三列做条件
1  先把【实盘录入】表中的数据提取到【差异对比】表中 (不排序)
2   再用【实盘录入】表中的数据与【库存】表中的数据对比,把未盘点的商品再提取到【差异对比】表中(未盘的提取后对应实盘数量赋值0数量),仍然不做排序

3   两张表提取到差异表中,做条件筛除。
含0库存: 库存表中库存数为0的也提取到差异表中
不含0库存: 库存表中库存数为0的不提取
差异0不提取:两张表中只要是数量差异为0的都不提取到差异表。


盘点差异对比.zip

22.13 KB, 下载次数: 28

TA的精华主题

TA的得分主题

发表于 2023-7-13 12:44 | 显示全部楼层
...........

盘点差异对比.rar

32.03 KB, 下载次数: 64

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-7-13 13:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

图片.png 给默默奉献的盼盼老师点个赞,啥也不说就是提供作品

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-13 13:28 | 显示全部楼层

非常感谢老师,你的代码太牛了。和字典法不同。
但是我运行后有以下问题:
1、无论在库存表新增一个商品或实盘录入表中盘点一个新商品,差异表中都不显示这条信息。
2、也入未盘点的商品 对应的实盘数量列需要赋值 0数量。(盘点到的商品数量不动)。同时计算差异数量列=实盘数量列-库存数量列

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-13 13:40 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

非常感谢老师,你的代码太牛了。和字典法不同。
但是我运行后有以下问题:
1、导入未盘点的商品 对应的实盘数量列需要赋值 0数量。(盘点到的商品数量不动)。同时计算差异数量列=实盘数量列-库存数量列
2、差异表中显示要以实盘表中数据优先显示,然后再显示未盘点商品。(测试了一下,库存新增两个商品,实盘表中盘点新增的第二个商品,差异表中会先显示新增的商品1和新增的商品2.怎么能以实盘表中数据优先显示呢)

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-18 07:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
各位老师,如果用数组和字典法,代码怎么定。SQL 完全看不懂
附件如1楼
两张表对比以 【货号、条码】两列做条件
1  先把【实盘录入】表中的数据提取到【差异对比】表中 (不排序)
2   再用【实盘录入】表中的数据与【库存】表中的数据对比,把未盘点的商品再提取到【差异对比】表中(未盘的提取后对应实盘数量赋值0数量),优先显示实盘录入的内容。

3   两张表提取到差异表中,做条件筛除。
含0库存: 库存表中库存数为0的也提取到差异表中
不含0库存: 库存表中库存数为0的不提取
差异0不提取:两张表中只要是数量差异为0的都不提取到差异表。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-19 19:01 | 显示全部楼层

老师,你好,你写的SQL代码。我进行了学习,加以注释。
并用到了我的表中。有一些问题还请老师再给予帮助。谢谢!
提示str_cnn 变量未定义。
然后我在Dim中加入了str_cnn 的定义。
结果又出现了“至少一个参数没有被指定值” 点击调试指向代码“rst.Open Sql, Cnn, 1, 4”
而且我这边运行出现以下问题。
1、没有盘点到的商品(实盘录入表中没有的商品)提取到差异表中,实盘数量列需要显示 0(实盘录入表中有的商品 实盘数量不变)
2、没有盘点到的商品(实盘录入表中没有的商品) 差异数量不会自动计算。
3、如何优先显示实盘录入表中数据再显示没有盘点到的商品。现在是按照库存表中的顺序在显示。






Sub test()
Dim Cnn As Object, rst As Object, str_cnn
Dim mypath As String, Sql As String, st As String
Set Cnn = CreateObject("ADODB.Connection")  '以上是第一步,后期绑定ADO
mypath = ThisWorkbook.FullName '获取当前工作簿的路径和名称
Set rst = CreateObject("ADODB.Recordset")
If Application.Version < 12 Then
   str_cnn = "Provider=Microsoft.jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & mypath '格式为.xls调用以下语句
  Else
   str_cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & mypath '格式为.xlsx调用下述语句
End If
Cnn.Open str_cnn '判断一下当前excel的版本,12.0以下使用microsoft.jet.oledb.4.0;以上使用Microsoft.ACE.OLEDB.12.0
'以上是第二步,建立链接
If Sheet4.OptionButton1.Value = True Then
    st = ""                          '判断含0库存提取
   
End If
If Sheet4.OptionButton2.Value = True Then
    st = " and val(库存数量)<>0 and 库存数量 is not null"    '判断不含0库存提取
   
End If
If Sheet4.OptionButton3.Value = True Then
    st = " and 实盘数量-库存数量<>0"    '判断差异为0不提取
   
End If


Sql = "select a.货号 as 货号,a.条码 as 条码,a.商品名称 as 商品名称,a.单位 as 单位,实盘数量,库存数量,实盘数量-库存数量 as 差异数量 from" _
   & "[" & Sheet3.name & "$a:j] as a left join [" & Sheet2.name & "$a:f] as b on  a.条码=b.条码 where 1=1 "
                                                                                                                    'Sql 语句,查询 sheet3和sheet2 表中货号、条码.....
Sql = Sql & st
Application.ScreenUpdating = False      '禁止出现提示对话框
rst.Open Sql, Cnn, 1, 4
With Sheet4
.Range("b2:h65536").ClearContents   '清空【B2:H65536】区域内容
.Range("b2").CopyFromRecordset rst  '原 将SQL查询到的内容复制到B2单元格为左上角的单元格区域
' 以上是第三步,执行SQL语句并将数据读入表格指定区域
Cnn.Close '关闭链接
Set Cnn = Nothing '释放内存
Application.ScreenUpdating = True    '允许屏幕更新


End With
End Sub


TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-19 21:00 | 显示全部楼层

老师,你好,你写的SQL代码。我进行了学习,加以注释。
并用到了我的表中。有一些问题还请老师再给予帮助。谢谢!
提示str_cnn 变量未定义。
然后我在Dim中加入了str_cnn 的定义。
结果又出现了“至少一个参数没有被指定值” 点击调试指向代码“rst.Open Sql, Cnn, 1, 4”

而且我这边运行出现以下问题。
1、没有盘点到的商品(实盘录入表中没有的商品)提取到差异表中,实盘数量列需要显示 0(实盘录入表中有的商品 实盘数量不变)
2、没有盘点到的商品(实盘录入表中没有的商品) 差异数量不会自动计算。
3、如何优先显示实盘录入表中数据再显示没有盘点到的商品。现在是按照库存表中的顺序在显示。






Sub test()
Dim Cnn As Object, rst As Object, str_cnn
Dim mypath As String, Sql As String, st As String
Set Cnn = CreateObject("ADODB.Connection")  '以上是第一步,后期绑定ADO
mypath = ThisWorkbook.FullName '获取当前工作簿的路径和名称
Set rst = CreateObject("ADODB.Recordset")
If Application.Version < 12 Then
   str_cnn = "Provider=Microsoft.jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & mypath '格式为.xls调用以下语句
  Else
   str_cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & mypath '格式为.xlsx调用下述语句
End If
Cnn.Open str_cnn '判断一下当前excel的版本,12.0以下使用microsoft.jet.oledb.4.0;以上使用Microsoft.ACE.OLEDB.12.0
'以上是第二步,建立链接
If Sheet4.OptionButton1.Value = True Then
    st = ""                          '判断含0库存提取
   
End If
If Sheet4.OptionButton2.Value = True Then
    st = " and val(库存数量)<>0 and 库存数量 is not null"    '判断不含0库存提取
   
End If
If Sheet4.OptionButton3.Value = True Then
    st = " and 实盘数量-库存数量<>0"    '判断差异为0不提取
   
End If


Sql = "select a.货号 as 货号,a.条码 as 条码,a.商品名称 as 商品名称,a.单位 as 单位,实盘数量,库存数量,实盘数量-库存数量 as 差异数量 from" _
   & "[" & Sheet3.name & "$a:j] as a left join [" & Sheet2.name & "$a:f] as b on  a.条码=b.条码 where 1=1 "
                                                                                                                    'Sql 语句,查询 sheet3和sheet2 表中货号、条码.....
Sql = Sql & st
Application.ScreenUpdating = False      '禁止出现提示对话框
rst.Open Sql, Cnn, 1, 4
With Sheet4
.Range("b2:h65536").ClearContents   '清空【B2:H65536】区域内容
.Range("b2").CopyFromRecordset rst  '原 将SQL查询到的内容复制到B2单元格为左上角的单元格区域
' 以上是第三步,执行SQL语句并将数据读入表格指定区域
Cnn.Close '关闭链接
Set Cnn = Nothing '释放内存
Application.ScreenUpdating = True    '允许屏幕更新


End With
End Sub


微信截图_20230719190042.png

TA的精华主题

TA的得分主题

发表于 2023-7-22 07:43 来自手机 | 显示全部楼层
zhangwg0604 发表于 2023-7-19 21:00
老师,你好,你写的SQL代码。我进行了学习,加以注释。
并用到了我的表中。有一些问题还请老师再给予帮 ...

问题出在SQL语句上,where 1=1可能不对。可以把这个条件去掉测试一下。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-22 17:13 | 显示全部楼层
512008404 发表于 2023-7-22 07:43
问题出在SQL语句上,where 1=1可能不对。可以把这个条件去掉测试一下。

where 1=1  这个条件我删除了,结果还是提示一样的错误。
调试仍然指向 “rst.Open Sql, Cnn, 1, 4”
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-23 12:48 , Processed in 0.051172 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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