ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 用VBA实现两个工作簿数据的匹配

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-3-30 11:01 | 显示全部楼层 |阅读模式
本帖最后由 jiuri0221 于 2015-3-30 11:04 编辑

工作簿表1和工作簿表2 都有一个相同的编码,想把工作簿2中的数据匹配到工作簿1中。
如果2和1匹配上,就在1的接通日期写上当前日期。
                            地址列匹配上。
                            登记时间列匹配上。
如果2的数据在1中没有找到,没有匹配上的数据,它所在各列空着。
麻烦各位高手指点。这个是不是涉及到调用其他工作簿中的数据呀,小的不行了。求助!!

V表.rar

15.2 KB, 下载次数: 172

大表

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-3-31 11:56 | 显示全部楼层
感觉应该用ADO和SQL语言。请大神路过指点迷津

TA的精华主题

TA的得分主题

发表于 2015-3-31 13:25 | 显示全部楼层
Sub zz()
    Dim d, ar
    Set d = CreateObject("Scripting.Dictionary")
    Application.ScreenUpdating = False
    Workbooks.Open (ThisWorkbook.Path & "\大表2.xlsx")
    ar = ActiveWorkbook.Sheets(1).Range("A1").CurrentRegion
    ActiveWorkbook.Close False
    For i = 2 To UBound(ar)
        d(ar(i, 1)) = Array(ar(i, 2), ar(i, 3))
    Next
    With Sheet1
        For i = 2 To .[a1048576].End(3).Row
            If d.exists(.Cells(i, 1).Value) Then
                .Cells(i, 2) = Date
                .Cells(i, 3).Resize(1, 2) = d(.Cells(i, 1).Value)
            End If
        Next
    End With
    Application.ScreenUpdating = True
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-3-31 13:27 | 显示全部楼层
>>>>>>>>>>>>>>>>>>>>>>


V表.rar (23.22 KB, 下载次数: 541)








TA的精华主题

TA的得分主题

 楼主| 发表于 2015-4-1 00:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
zax010 发表于 2015-3-31 13:27
>>>>>>>>>>>>>>>>>>>>>>

学习了,好用。我得好好研究一下。谢谢zax010

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-4-3 15:04 | 显示全部楼层
我的想法:
            在工作簿2关闭的情况下进行查询匹配,因为我还有其他工作簿要匹配。所以为了一会添加程序方便。
            大表1和大表2放在  文件夹 C:\Users\my\Desktop\V表
            不知道能不能用getfile拿到表2里的数据呢?怎么才能在表2关闭的情况下抓取数据。谢谢。以下是我的思路编的,帮我看看

Public Sub VES()
Dim fso, fld,wb
Set fso = CreateObject("Scripting.FileSystemObject")  
'Application.ScreenUpdating = False
'Application.diplayalerts = False
On Error Resume Next
Dim strpath As String
strpath = "C:\Users\my\Desktop\V表" & "\"
Dim strfile, strsheet As String
strfile = "大表2.xlsx"
strsheet = "工单明细报表"

Set fld = fso.getfolder(strpath)   ‘找到放表2这个文件夹

wb = Getfile("C:\Users\my\Desktop\V表\大表2.xlsx")
Dim i, j As Integer
Dim lrow2 As Integer
lrow2 = wb.Worksheets(strsheet).Range("a65536").End(xlUp).Row  ’找到表2的最后一行
With workbooks("大表1").Worksheets("sheet1")
    For i = 2 To .Range("j65536").End(xlUp).Row
    rng = wb.Worksheets(strsheet).Range("a1:a" & lrow2).Find(what:=.cell(i, 1))    ‘在表1中的数据与表2匹配
   
    If Not rng Is Nothing Then
    .Cells(i, 2) = Date
    .Cells(i, 3) = rng.Offset(0, 1).Value
    .Cells(i, 4) = rng.Offset(0, 2).Value
        End If
    Next
End With
Application.ScreenUpdating = False
Application.diplayalerts = False
End Sub

能帮我看一下这个程序为什么提取不了表2内容呀?错在哪里了?

TA的精华主题

TA的得分主题

发表于 2018-8-24 09:00 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2022-11-24 15:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
zax010 发表于 2015-3-31 13:25
Sub zz()
    Dim d, ar
    Set d = CreateObject("Scripting.Dictionary")

d(ar(i, 1)) = Array(ar(i, 2), ar(i, 3))这一句看不懂。。。。

TA的精华主题

TA的得分主题

发表于 2024-8-18 15:35 | 显示全部楼层
会飞的土豆宏宏 发表于 2022-11-24 15:12
d(ar(i, 1)) = Array(ar(i, 2), ar(i, 3))这一句看不懂。。。。

这是字典用法。一句两句说不清楚,你可以到抖音、B站等VBA播主的页面上去学习一下字典的用法,就明白了。   

这句,说白了,就是利用字典key值的唯一性,将ar(i,2),ar(i,3)作为key值的item值,此时的key 和 item,是一对一对对应的。在本例,就是一个编号对应着一个地址和日期。   把它们作为字典的一组数据存起来,然后去表1中查找,以编号为索引,找到后就将对应的地址和日期赋值给后面的单元格。

TA的精华主题

TA的得分主题

发表于 2024-8-18 15:45 | 显示全部楼层
jiuri0221 发表于 2015-4-3 15:04
我的想法:
            在工作簿2关闭的情况下进行查询匹配,因为我还有其他工作簿要匹配。所以为了一会 ...

1、楼上那个网友的程序,就可以实现在关闭工作簿的情况下,程序正常运行。
2、你这个程序用得是getfile,这个函数不是打开文件,它返回的是file文件对象,这是一个关于某个文件的各种属性的信息集合。  我记得是这样。所以,实际上,你并没有打开工作表。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 16:47 , Processed in 0.045502 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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