ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] VBA怎么在同一目录下跨工作簿实现index +match功能或者vlookup功能

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-12 16:36 | 显示全部楼层

我看到sheet1出现了两次,分别是对应两个不同工作簿的sheet名字吗?
比如源数据的sheet1命名为南,写入数据的sheet1命名为北。

TA的精华主题

TA的得分主题

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

TA的精华主题

TA的得分主题

发表于 2023-7-12 16:45 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
你直接说你的需求是什么就可以了,整这1、2、3、4、条有什么吊用?单纯出来吐槽嘛?
1、数据源是什么?
2、口径是什么?
3、想要的结果是什么?
基本上任何需求,把以上三个关键点说清楚,都能很快解决!
祝您生活愉快,再见!

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-12 16:52 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-7-12 16:55 | 显示全部楼层
zyali1006 发表于 2023-7-12 16:52
这个名字列实现出来不对哦

甚意思??不知所云嘛,反馈问题要具体明了

TA的精华主题

TA的得分主题

发表于 2023-7-12 16:56 | 显示全部楼层
zyali1006 发表于 2023-7-12 16:36
我看到sheet1出现了两次,分别是对应两个不同工作簿的sheet名字吗?
比如源数据的sheet1命名为南,写入 ...

代码已注释,逻辑很清楚,自己看一下

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-12 16:58 | 显示全部楼层
7月.7z (15.28 KB, 下载次数: 8)
重新传了下附件,sheet有多个命名。有大神帮忙再看下吗

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-12 16:59 | 显示全部楼层
WANT-T 发表于 2023-7-12 16:45
你直接说你的需求是什么就可以了,整这1、2、3、4、条有什么吊用?单纯出来吐槽嘛?
1、数据源是什么?
2 ...

重新传了一个7月的附件,帮忙看看

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-12 17:01 | 显示全部楼层
3190496160 发表于 2023-7-12 16:55
甚意思??不知所云嘛,反馈问题要具体明了

写入表有四列数据,有一个表头叫名字列,我点击代码运行。结果出来的是数字。
您帮忙看看

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-12 17:04 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
feilanga 发表于 2023-7-12 16:56
代码已注释,逻辑很清楚,自己看一下

是的,这个代码能运行成功。我也特地再注释看了。
Sub CX()
    Dim arr, brr
    Application.ScreenUpdating = False
    ' 创建一个字典对象
    Set dic = CreateObject("Scripting.Dictionary")
    ' 获取当前工作簿的路径
    p = ThisWorkbook.Path & "\"
    ' 遍历目标路径下所有以".xls"开头的文件
    f = Dir(p & "*.xls*")
    Do While f <> ""
        ' 排除当前工作簿并选择包含"源数据"的文件
        If f <> ThisWorkbook.Name And InStr(f, "源数据") Then
            ' 打开文件
            Set wb = Workbooks.Open(p & f, 0)
            ' 遍历文件中的所有工作表
            For Each sht In wb.Sheets
                ' 只处理索引大于0的工作表
                If sht.Index > 0 Then
                    ' 将工作表的数据存储在数组中
                    arr = sht.UsedRange
                    ' 遍历数组,并将相应数据存储到字典对象中
                    For i = 5 To UBound(arr)
                        Key = arr(i, 1) ' 第一列作为键值
                        ' 创建一个嵌套字典对象,并将对应的键值和数据存储进去
                        Set dic(Key) = CreateObject("scripting.dictionary")
                        For j = 2 To UBound(arr, 2)
                            key2 = arr(4, j) ' 第四行作为二级键值
                            dic(Key)(key2) = arr(i, j) ' 存储对应的数据到嵌套字典中
                        Next j
                    Next i
                End If
            Next sht
            ' 关闭文件,不保存
            wb.Close False
        End If
        ' 获取下一个文件
        f = Dir
    Loop

    ' 将目标数据区域存储在数组中
    brr = Sheet1.UsedRange
    ' 遍历目标数据数组,并根据字典对象进行数据替换
    For i = 3 To UBound(brr)
        For j = 3 To UBound(brr, 2)
            ' 如果第二列为空,则跳出循环
            If VBA.IsEmpty(brr(i, 2)) Then Exit For
            Key = brr(i, 2) ' 第二列作为主键
            key2 = brr(2, j) ' 第二行作为二级键值
            ' 如果字典对象中存在对应的键值和二级键值,则进行数据替换
            If dic(Key).Exists(key2) Then
                brr(i, j) = dic(Key)(key2)
            End If
        Next
    Next
    Sheet1.UsedRange = brr
    Application.ScreenUpdating = True
End Sub


可以再具体说说sheet命名吗?sheet1代表的是哪个工作簿?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 07:56 , Processed in 0.032537 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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