Excel精英培训网

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

[已解决]find 的难度应用

[复制链接]
发表于 2016-7-25 06:21 | 显示全部楼层 |阅读模式
本帖最后由 张雄友 于 2016-7-25 20:42 编辑

Set theCell = .Cells.Find("车间", .Cells(1), xlFormulas, xlWhole, xlByRows, xlNext, True, False, False)               
If Not theCell Is Nothing Then               

单元格中有很多个车间,如我要查出第五个车间,怎么表示??
最佳答案
2016-7-25 20:01
exit for表示找到第5个之后就不往下找了。不要也行,不影响结果,会影响速度(找到后再往下的循环都是无用功)
 楼主| 发表于 2016-7-25 07:12 | 显示全部楼层
如附件不知如何实现?

Find的第几次查找.zip

44.2 KB, 下载次数: 5

回复

使用道具 举报

发表于 2016-7-25 08:45 | 显示全部楼层
根据你的程序修改如下:
  1. Sub Find的第几次查找()
  2.     '目的用 Find 查找出每个工作表第五次车间出现的周边数据在哪里,并复制出来。
  3.     '由于每个第五次车间出现的位置不一样,如新建文件夹工作表中黄色单元格就是要复制的数据。复制到本工作簿中。
  4.    
  5.     Dim MyPath$, MyFile$, arr, brr(1 To 100000, 1 To 10), i&, j&, m&, R&, Sh, C As Range, x%
  6.    ' Rows("2:" & Rows.Count).Delete
  7.     Application.ScreenUpdating = False
  8.     MyPath = ThisWorkbook.Path & "\新建文件夹"
  9.     MyFile = Dir(MyPath & "*.xls*")
  10.     Do While MyFile <> ""
  11.         Set wb = Workbooks.Open(MyPath & MyFile, UpdateLinks:=0)
  12.         x = 0
  13.              For Each Sh In wb.Worksheets
  14.                 x = 0
  15.                 R = Sh.Cells(Sh.Rows.Count, "A").End(xlUp).Row
  16.                 If Not IsEmpty(Sh.UsedRange) Then
  17.                     Set C = Sh.Columns("A:A").Find("车间", Range("A" & R), xlValues, xlWhole, xlByRows, xlNext, True, False, False) '如果表示第五次车间出现的周边数据??
  18.                     firstaddress = C.Address
  19.                     x = 1
  20.                     Do
  21.                         Set C = Sh.Columns("A:A").FindNext(C)
  22.                         If C.Address <> firstaddress Then
  23.                             x = x + 1
  24.                         End If
  25.                     Loop While Not C Is Nothing And C.Address <> firstaddress And x < 5
  26.                     If Not C Is Nothing Then
  27.                         arr = C.CurrentRegion '如果表示第五次车间出现的周边数据的数组??
  28.                         For i = 2 To UBound(arr)
  29.                              m = m + 1
  30.                             brr(m, 1) = arr(i, 1)
  31.                             brr(m, 2) = arr(i, 2)
  32.                             brr(m, 3) = arr(i, 3)
  33.                         Next i
  34.                     End If
  35.                 End If
  36.             Next Sh
  37.             wb.Close False
  38.         MyFile = Dir
  39.     Loop
  40.     If m > 0 Then Cells(2, 1).Resize(m, 3) = brr
  41.     Application.ScreenUpdating = True
  42.     MsgBox "汇总完成,请查看!", 64, "提示"
  43. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2016-7-25 09:19 | 显示全部楼层
老司机带带我 发表于 2016-7-25 08:45
根据你的程序修改如下:

不太明白这个小于号的用意,如果要查询第一次与最后一次怎么表示??,特别是最后一次,因为我们不知道有多少次车间出现。谢谢你。
回复

使用道具 举报

发表于 2016-7-25 11:40 | 显示全部楼层
可以建个数组,把找到车间的行数全部放到数组里,然后用index取得任意某次的行。
回复

使用道具 举报

 楼主| 发表于 2016-7-25 11:52 | 显示全部楼层
grf1973 发表于 2016-7-25 11:40
可以建个数组,把找到车间的行数全部放到数组里,然后用index取得任意某次的行。

求求您了,非常多谢,怎么做?
回复

使用道具 举报

 楼主| 发表于 2016-7-25 12:05 | 显示全部楼层
老司机带带我 发表于 2016-7-25 08:45
根据你的程序修改如下:

三楼的判断应该还差一句什么判断:如一工作表最多是五次出现,当我要查询第六次出现时应该是找不到才对,但它又是从头开始找到了第一次,故不对。
回复

使用道具 举报

发表于 2016-7-25 14:22 | 显示全部楼层
请看附件。

Find的第几次查找.rar

45.7 KB, 下载次数: 3

回复

使用道具 举报

 楼主| 发表于 2016-7-25 15:54 | 显示全部楼层
grf1973 发表于 2016-7-25 14:22
请看附件。

Exit for 有什么用的?是什么用意?一定要的吗?谢谢!
回复

使用道具 举报

发表于 2016-7-25 20:01 | 显示全部楼层    本楼为最佳答案   
exit for表示找到第5个之后就不往下找了。不要也行,不影响结果,会影响速度(找到后再往下的循环都是无用功)
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 17:17 , Processed in 0.604214 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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