Excel精英培训网

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

“样本文件夹”下有很多工作薄且格式都一样,以前用VLOOKUP查询速度很慢,现要求在...

[复制链接]
发表于 2014-12-31 19:30 | 显示全部楼层 |阅读模式
本帖最后由 cuishunde 于 2015-1-1 12:22 编辑

[tr] [/tr]
[tr] [/tr]
[tr] [/tr]
[tr] [/tr]
“样本文件夹”下有很多工作薄且格式都一样,以前用VLOOKUP查询速度很慢,现要求在不打开“样本文件夹”下的工作簿,在查询工作薄中输入手机号码后就能查询“样本文件夹”下的所有工作簿,如果有就显示在黄色区域,如果没有就显示为空
(新)文件.rar (6.47 KB, 下载次数: 4)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-12-31 22:33 | 显示全部楼层
  1. Sub Macro1()
  2. Dim mypath$, wj$, wb As Workbook
  3. Dim arr, brr, i&, s&
  4. Application.ScreenUpdating = False
  5. ReDim brr(1 To 1000, 1 To 4)
  6. gjz = [a2]
  7. mypath = ThisWorkbook.Path & "\样本"
  8. wj = Dir(mypath & "*.xls*")
  9. Do While wj <> ""
  10.     Set wb = GetObject(mypath & wj)
  11.     arr = wb.Sheets(1).Range("a1").CurrentRegion
  12.     wb.Close 0
  13.     For i = 2 To UBound(arr)
  14.         If arr(i, 4) Like "*" & gjz & "*" Then
  15.             s = s + 1
  16.             brr(s, 1) = arr(i, 1)
  17.             brr(s, 2) = arr(i, 2)
  18.             brr(s, 3) = arr(i, 3)
  19.             brr(s, 4) = arr(i, 5)
  20.         End If
  21.     Next
  22.     wj = Dir
  23. Loop
  24. If s > 0 Then Range("b2").Resize(s, 4) = brr
  25. Application.ScreenUpdating = True
  26. End Sub
复制代码
回复

使用道具 举报

发表于 2014-12-31 22:34 | 显示全部楼层
………………

文件.zip

12.13 KB, 下载次数: 6

回复

使用道具 举报

 楼主| 发表于 2015-1-1 11:32 | 显示全部楼层
dsmch 发表于 2014-12-31 22:34
………………

非常感谢,你的编码很符合我的要求,由于我是一个菜鸟,麻烦你在该一下编码,我把附件在重传一下,谢谢,编码中能否控制一下如是查询表中没有电话号就不提取数据呀(如果不好加可以不加 文件.rar (6.47 KB, 下载次数: 2)
回复

使用道具 举报

发表于 2015-1-1 12:01 | 显示全部楼层
………………

文件.zip

14.68 KB, 下载次数: 6

回复

使用道具 举报

 楼主| 发表于 2015-1-1 12:17 | 显示全部楼层
dsmch 发表于 2015-1-1 12:01
………………

Sub 查询()
    Dim sht As Worksheet, drow%, i%, j%, Arr, Brr, d, Crr
    Set d = CreateObject("scripting.dictionary")
    Dim r As Long, c As Long
    r = 2
    Application.ScreenUpdating = False    '屏幕闪烁关闭
    Dim filename As String, wb As Workbook, Erow As Long
    Dim fn As String
    '  On Error GoTo VeryEnd
    filename = Dir(ThisWorkbook.Path & "\样本\*.xls")     '对文件夹内的工作簿进行循环,循环查找的格式  *.xls
    ' MsgBox filename
    Do While filename <> ""
        If filename <> ThisWorkbook.Name Then             '判断文件是否是本工作簿
            '  Erow = Range("A1").End(xlDown).Row   '取得汇总表中第一条空行行号
            '  MsgBox "erow=" & Erow
            fn = ThisWorkbook.Path & "\样本\" & filename    '取得循环符合条件工作簿的  文件夹地址,赋值给fn 这个变量

            ' MsgBox "现在汇总的工作簿是fn= " & fn

            Set wb = GetObject(fn)                            '将fn代表的工作簿对象赋给变量
            '  MsgBox wb.Name
            Set sht = wb.Worksheets(1)                        '汇总的是第1张工作表
            '将数据表中的记录保存在arr数组里
            Arr = sht.Range("a2:e" & sht.Range("a65536").End(3).Row)            '将结果存放在定义好的数组arr中
            For i = 1 To UBound(Arr)
                d(Arr(i, 4)) = Arr(i, 1) & "@" & Arr(i, 2) & "@" & Arr(i, 3) & "@" & Arr(i, 5)
            Next
            Erase Arr
            wb.Close False
        End If
        filename = Dir      '进行下一步的循环
    Loop
    Dim tt As String
    ' MsgBox d.Count
    With Worksheets("sheet1")
        ' .Range("l2").Resize(d.Count, 1) = Application.Transpose(d.keys)
        '  .Range("m2").Resize(d.Count, 1) = Application.Transpose(d.items)

        drow = .Range("a65536").End(3).Row
        '   MsgBox drow
        Brr = .Range("a2:e" & drow)
        .Range("l17").Resize(UBound(Brr), 5) = Brr
        For i = 1 To UBound(Brr)
            tt = "@" & CStr(Brr(i, 1))
            '  MsgBox tt & "    " & d(tt)
            Crr = Split(d(Brr(i, 1)), "@")
            ' MsgBox UBound(Crr)
            If UBound(Crr) > 0 Then
                For j = 0 To 3
                    Brr(i, j + 2) = Crr(j)
                Next
            End If
        Next
        .Range("a2").Resize(UBound(Brr), 5) = Brr
    End With

VeryEnd:
    Application.ScreenUpdating = True


End Sub




能否把上面代码改成附件中的格式,谢谢 (新)文件.rar (6.47 KB, 下载次数: 0)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-16 06:21 , Processed in 0.343803 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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