Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 5406|回复: 10

求助一个数据引用的VBA代码

[复制链接]
发表于 2019-4-3 20:30 | 显示全部楼层 |阅读模式
2学分
本人只有简单的C语言基础,对于VBA不是很会,但现在急需一个小的代码,求大神指教!


大概需求是:表格分别内存了个 绝对路径、子表名称、单元格位置。 现需要引用前面三个单元格所对应的文件内的数值。
感觉应该比较简单,就是自己怎么写也不对,求大神指点!

求助内容.png

求助数据引用.rar

7.94 KB, 下载次数: 4

最佳答案

查看完整内容

Sub test() Dim A, i, j, k, wk Sheets(1).Select i = Range("a65536").End(xlUp).Row Range("c6:h" & i) = "" A = Range("A1").CurrentRegion For i = 6 To UBound(A) If A(i, 1) "" Then '1)路径 Set wk = Workbooks.Open(A(i, 1)) '2)选择 For k = 1 To 4 If A(i, 2) = A(k, 1) Then Exit For ...
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2019-4-3 20:31 | 显示全部楼层
Sub test()
    Dim A, i, j, k, wk
    Sheets(1).Select
    i = Range("a65536").End(xlUp).Row
    Range("c6:h" & i) = ""
    A = Range("A1").CurrentRegion

    For i = 6 To UBound(A)
        If A(i, 1) <> "" Then
            '1)路径
            Set wk = Workbooks.Open(A(i, 1))
            '2)选择
            For k = 1 To 4
                If A(i, 2) = A(k, 1) Then Exit For
            Next k
            '3)取值
            For j = 3 To UBound(A, 2)
                If A(k, j) <> "" Or A(k + 1, j) <> "" Then
                    'A(i, j) = 工作簿.工作表.单元格
                    A(i, j) = wk.Sheets(A(k, j)).Range(A(k + 1, j))
                End If
            Next j
            wk.Close 0
        End If
    Next i
    Range("A1").Resize(UBound(A), UBound(A, 2)) = A
End Sub

2.rar (73.03 KB, 下载次数: 6)
回复

使用道具 举报

 楼主| 发表于 2019-4-3 20:33 | 显示全部楼层
提前感谢了大家了,想必这个代码对大神们应该不在话下吧
回复

使用道具 举报

发表于 2019-4-4 08:51 | 显示全部楼层
没看懂需求
如果只2个文件(实际不止),能模拟一个结果么?
回复

使用道具 举报

 楼主| 发表于 2019-4-4 09:09 | 显示全部楼层
爱疯 发表于 2019-4-4 08:51
没看懂需求
如果只2个文件(实际不止),能模拟一个结果么?

计划是从几个个文件中提取数据,每个文件提取的数据约三十个左右,但数据所在的位置并不一样。数据源有几种表格模板
回复

使用道具 举报

 楼主| 发表于 2019-4-4 09:15 | 显示全部楼层
爱疯 发表于 2019-4-4 08:51
没看懂需求
如果只2个文件(实际不止),能模拟一个结果么?

比如在C6单元格,我希望得到的是 来自这个位置的数据(='F:\各格式表格模板\数据源1.xls]汇总表'!A4),也就是A6+C1+C2;
C7,是另一种模板,希望得到的数据位置是:A7+C3+C4

回复

使用道具 举报

发表于 2019-4-4 09:46 | 显示全部楼层
wqvbzyq 发表于 2019-4-4 09:15
比如在C6单元格,我希望得到的是 来自这个位置的数据(='F:\各格式表格模板\数据源1.xls]汇总表'!A4),也 ...

我是想先看看两端,即(先只放2个)源文件和结果
我觉得看了后,才好理解你提到的处理方式





回复

使用道具 举报

 楼主| 发表于 2019-4-4 10:33 | 显示全部楼层
爱疯 发表于 2019-4-4 09:46
我是想先看看两端,即(先只放2个)源文件和结果
我觉得看了后,才好理解你提到的处理方式

已重新上传附件,数据实现可能有几千行,想实现的结果如表格里面的第6、7行数据一样。

求助数据引用.rar

371.43 KB, 下载次数: 2

回复

使用道具 举报

发表于 2019-4-4 10:59 | 显示全部楼层
c6
=$A6&INDEX(C:C,MATCH($B6,$A:$A,))&INDEX(C:C,MATCH($B6,$A:$A,)+1)




相当于把三部分连在一起,再下拉右拉,是吗
回复

使用道具 举报

发表于 2019-4-4 16:11 | 显示全部楼层
真得跟高手好好学习一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-21 00:41 , Processed in 0.278578 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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