Excel精英培训网

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

[已解决]求助代码:顺藤摸瓜查询目标数据

[复制链接]
发表于 2013-1-10 09:11 | 显示全部楼层 |阅读模式
附件 顺藤摸瓜查询目标.rar (124.71 KB, 下载次数: 19)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-1-10 10:01 | 显示全部楼层
  1. Function SearchInWorkbook(ByVal Filename$, ByVal iCol&, ByVal iRow&, ByVal iValue&) As Long
  2.     Dim wbname$, Path$
  3.     Dim wb As Workbook
  4.     Dim rg As Range
  5.     Path = ThisWorkbook.Path & Application.PathSeparator & "表格" & Application.PathSeparator
  6.     wbname = Dir(Path & Filename & ".*")
  7.     If Len(wbname) = 0 Then SearchInWorkbook = 0: Exit Function
  8.     Set wb = GetObject(Path & wbname)
  9.     If wb Is Nothing Then SearchInWorkbook = 0: Exit Function
  10.     With wb.Worksheets("Sheet1")
  11.         Set rg = .Range(.Cells(1, iCol), .Cells(iRow, iCol)).Find(iValue, , , , , xlPrevious)
  12.         'Debug.Print rg.Address
  13.     End With
  14.     If rg Is Nothing Then
  15.     SearchInWorkbook = 0
  16.     Else
  17.     SearchInWorkbook = rg.Row
  18.     End If
  19.     wb.Close False
  20. End Function
复制代码
工作量有点大,我看看有没有可以改进的地方。
回复

使用道具 举报

发表于 2013-1-10 10:03 | 显示全部楼层
千万不要直接在单元格中引用,这样刷新会要死人的,
回复

使用道具 举报

发表于 2013-1-10 10:08 | 显示全部楼层
  1. Sub 统计()
  2.     Dim arr, i&
  3.     i = Cells(Rows.Count, 2).End(xlUp).Row
  4.     arr = Range("a1:e" & i)
  5.     Application.ScreenUpdating = False
  6.     For i = 2 To UBound(arr)
  7.         If Len(arr(i, 2)) Then
  8.             arr(i, 5) = SearchInWorkbook(arr(i, 1), arr(i, 2), arr(i, 3), arr(i, 4))
  9.         End If
  10.     Next
  11.     Range("a1").Resize(UBound(arr), 5) = arr
  12.     Application.ScreenUpdating = True
  13.     MsgBox "统计完成"
  14. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-1-10 10:09 | 显示全部楼层
hwc2ycy 发表于 2013-1-10 10:01
工作量有点大,我看看有没有可以改进的地方。

谢谢老师帮助。能不能麻烦老师弄个附件?多谢了。
回复

使用道具 举报

 楼主| 发表于 2013-1-10 10:12 | 显示全部楼层
hwc2ycy 发表于 2013-1-10 10:08

我原来的附件比较乱,复进代码后,会出错。
回复

使用道具 举报

发表于 2013-1-10 10:23 | 显示全部楼层    本楼为最佳答案   
顺藤摸瓜查寻目标附件.rar (20.08 KB, 下载次数: 35)

评分

参与人数 1 +1 收起 理由
HongMeig + 1 很给力!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2013-1-17 20:06 | 显示全部楼层
hwc2ycy 发表于 2013-1-10 10:23

老师您好,程序试用了几天后,发现有读错数据。比如:按要求,是9,却读成39;按要求是8,却读成18,如下图:
未命名2.jpg

39那个位置应读成9。

未命名1.jpg

18那个位置应读成8

有对有错,不知何故。而且总是读成同尾数。

麻烦老师看看好吗?

回复

使用道具 举报

发表于 2013-1-17 22:07 | 显示全部楼层
HongMeig 发表于 2013-1-17 20:06
老师您好,程序试用了几天后,发现有读错数据。比如:按要求,是9,却读成39;按要求是8,却读成18,如下 ...

查找的时候没用完全匹配了,当时全是查一位数,我都没有考虑,我改下。
回复

使用道具 举报

发表于 2013-1-17 22:43 | 显示全部楼层
  1. Function SearchInWorkbook(ByVal Filename$, ByVal iCol&, ByVal iRow&, ByVal iValue&) As Long
  2.     Dim wbname$, Path$
  3.     Dim wb As Workbook
  4.     Dim rg As Range
  5.     Path = ThisWorkbook.Path & Application.PathSeparator & "表格" & Application.PathSeparator
  6.     wbname = Dir(Path & Filename & ".*")
  7.     If Len(wbname) = 0 Then SearchInWorkbook = 0: Exit Function
  8.     Set wb = GetObject(Path & wbname)
  9.     If wb Is Nothing Then SearchInWorkbook = 0: Exit Function
  10.     With wb.Worksheets("Sheet1")
  11.         Set rg = .Range(.Cells(1, iCol), .Cells(iRow, iCol)).Range.Find(iValue, , xlWhole, , , xlPrevious)
  12.         'Debug.Print rg.Address
  13.     End With
  14.     If rg Is Nothing Then
  15.     SearchInWorkbook = 0
  16.     Else
  17.     SearchInWorkbook = rg.Row
  18.     End If
  19.     wb.Close False
  20. End Function
复制代码
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 13:29 , Processed in 1.132288 second(s), 17 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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