Excel精英培训网

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

[已解决]求编一段VB代码,实现查询后显示后面相关的东西

[复制链接]
发表于 2012-3-11 08:52 | 显示全部楼层 |阅读模式
求编一段VB代码,要求如附件,有第一个表按查询,有查询后面单元格输入一些查询的东西,,能在标黄色区域显示查询出的所有相关的东西。能实现吗/ 求老师解答下。
最佳答案
2012-3-11 11:30
本帖最后由 bb75308973 于 2012-3-11 12:43 编辑

好吧,给你弄了下,你测试看看

在A1 输入要搜索的内容,然后点查询

  1. Sub 查询()
  2. Dim a, i As Integer, n As Integer, iadd$, n1 As Integer
  3. Dim sh As Worksheet, rg As Range, rg1 As Range, rgx As Range, rgy As Range
  4. Dim sc As Worksheet
  5. Dim arr
  6. Set sc = Sheets(1)
  7. n1 = 2
  8. a = sc.Range("A1").Value
  9. Application.ScreenUpdating = False
  10. On Error Resume Next
  11. sc.Range("A2:D65536").Clear
  12. For n = 2 To Sheets.Count
  13.     Set sh = Sheets(n)
  14.     With sh
  15.     Set rg1 = .Cells.Find(a, , , xlPart)
  16.     If Not rg1 Is Nothing Then
  17.         iadd = rg1.Address
  18.         Do
  19.             i = i + 1
  20.             Set rgx = rg1.CurrentRegion
  21.             Set rgy = .Columns(rg1.Column)
  22.             Set rg2 = Application.Intersect(rgx, rgy)
  23.             arr = rg2
  24.             sc.Range("A" & n1).Resize(, 4) = WorksheetFunction.Transpose(arr)
  25.             n1 = n1 + 1
  26.             Set rg1 = .Cells.FindNext(rg1)
  27.             If rg1 Is Nothing Then Exit Do
  28.         Loop Until iadd = rg1.Address
  29.     End If
  30.     End With
  31. Next
  32. On Error GoTo 0
  33. sc.Range("A:D").RemoveDuplicates (Array(1, 2, 3, 4))
  34. sc.Cells.Font.Size = 10
  35. Application.ScreenUpdating = True
  36. End Sub
复制代码

77.rar

20.26 KB, 下载次数: 34

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-3-11 09:12 | 显示全部楼层
回复

使用道具 举报

发表于 2012-3-11 09:16 | 显示全部楼层
咱也没有见过,不知道哪位高手解决下
回复

使用道具 举报

 楼主| 发表于 2012-3-11 09:32 | 显示全部楼层
其它结构呢。。比如在第一表查出后面表的东西。。相当于查找工作簿 显示在第一个特定区域 能用VB做吗?
回复

使用道具 举报

发表于 2012-3-11 09:38 | 显示全部楼层
这个应该能实现吧
说说我的想法供参考,没时间写代码了
查找每一个表的每一个单元格的内容,用部分匹配来搜,搜到后计算他的行号,然后取他附近一3个数据(当然这3个数据是有规律的)一起放进一个二维数组
同时二维数组的行维要+1
然后查找下一个
找完后
将二维数据输出到第一个表的黄色区域
回复

使用道具 举报

 楼主| 发表于 2012-3-11 09:48 | 显示全部楼层
  代码来个啊。。求代码
回复

使用道具 举报

发表于 2012-3-11 11:30 | 显示全部楼层    本楼为最佳答案   
本帖最后由 bb75308973 于 2012-3-11 12:43 编辑

好吧,给你弄了下,你测试看看

在A1 输入要搜索的内容,然后点查询

  1. Sub 查询()
  2. Dim a, i As Integer, n As Integer, iadd$, n1 As Integer
  3. Dim sh As Worksheet, rg As Range, rg1 As Range, rgx As Range, rgy As Range
  4. Dim sc As Worksheet
  5. Dim arr
  6. Set sc = Sheets(1)
  7. n1 = 2
  8. a = sc.Range("A1").Value
  9. Application.ScreenUpdating = False
  10. On Error Resume Next
  11. sc.Range("A2:D65536").Clear
  12. For n = 2 To Sheets.Count
  13.     Set sh = Sheets(n)
  14.     With sh
  15.     Set rg1 = .Cells.Find(a, , , xlPart)
  16.     If Not rg1 Is Nothing Then
  17.         iadd = rg1.Address
  18.         Do
  19.             i = i + 1
  20.             Set rgx = rg1.CurrentRegion
  21.             Set rgy = .Columns(rg1.Column)
  22.             Set rg2 = Application.Intersect(rgx, rgy)
  23.             arr = rg2
  24.             sc.Range("A" & n1).Resize(, 4) = WorksheetFunction.Transpose(arr)
  25.             n1 = n1 + 1
  26.             Set rg1 = .Cells.FindNext(rg1)
  27.             If rg1 Is Nothing Then Exit Do
  28.         Loop Until iadd = rg1.Address
  29.     End If
  30.     End With
  31. Next
  32. On Error GoTo 0
  33. sc.Range("A:D").RemoveDuplicates (Array(1, 2, 3, 4))
  34. sc.Cells.Font.Size = 10
  35. Application.ScreenUpdating = True
  36. End Sub
复制代码

77(答案).zip

186.65 KB, 下载次数: 17

回复

使用道具 举报

发表于 2012-3-11 23:20 | 显示全部楼层
本帖最后由 bb75308973 于 2012-3-11 23:24 编辑
tzjx200521 发表于 2012-3-11 21:58
见截图。。点结束查是能查出来,

明白了,你用的是2003版本的,建议升级到2007以上版本,好用多了!
2003没有去重功能
因为同一组结果里面的内容可能会含有搜索词的内容,这样就会出现重复输出结果
2007版本以上这个是很容易解决的,一个代码就OK了
菜单里也有去重功能
你可以在论坛上搜下2003的去重代码,将那条代码修改下就好了!

当然如果你不想去重你可以将
On Error GoTo 0
这句移动End sub 前面那里去
回复

使用道具 举报

 楼主| 发表于 2012-3-11 21:58 | 显示全部楼层
见截图。。点结束查是能查出来,
错误图.bmp
回复

使用道具 举报

 楼主| 发表于 2012-3-11 21:51 | 显示全部楼层
33.sc.Range("A:D").RemoveDuplicates (Array(1, 2, 3, 4))

这行提示有误。。。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-29 13:12 , Processed in 0.380124 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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