返回列表 上一主題 發帖

[發問] 只想要抓取符合條件的"第一筆"其他不要

回復 7# boblovejoyce

試試
  1. Sub test()
  2. i = 0
  3. Dim arr2()
  4. Set Rng = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
  5. arr = Range("J2:J" & Cells(Rows.Count, 10).End(xlUp).Row)
  6. For Each ar In arr
  7. ReDim Preserve arr2(i)
  8.     Set zz = Rng.Find(ar, , , , , 2)
  9.     Set aa = Rng.Find("  (net ", Range(zz.Address), , , , 2)
  10.     arr2(i) = aa
  11.     arr2(i) = Right(arr2(i), Len(arr2(i)) - 7)
  12.     i = i + 1
  13. '    '移除前面8個字元
  14.   Next
  15.    Range("K2").Resize(UBound(arr2) + 1) = Application.WorksheetFunction.Transpose(arr2)
  16. End Sub
複製代碼

TOP

回復 7# boblovejoyce

執行時間約2.2秒
  1. Sub test()
  2. t = Timer
  3. i = 0
  4. Dim arr2()
  5. Set Rng = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
  6. arr = Range("J2:J" & Cells(Rows.Count, 10).End(xlUp).Row)
  7. For Each ar In arr
  8. ReDim Preserve arr2(i)
  9.     Set zz = Rng.Find(ar, , , , , 2)
  10.     Set aa = Rng.Find("  (net ", Range(zz.Address), , , , 2)
  11.     arr2(i) = aa
  12.     arr2(i) = Right(arr2(i), Len(arr2(i)) - 7)
  13.     i = i + 1
  14. '    '移除前面8個字元
  15.   Next
  16.    Range("K2").Resize(UBound(arr2) + 1) = Application.Transpose(arr2)
  17. MsgBox Format(Timer - t, "0.0000")
  18. End Sub
複製代碼

TOP

回復 1# boblovejoyce

反覆的執行你的原程式,執行的時間很長的原因是資料過多,近8萬行的資料
而第一個Find尋找又是向下尋找,結果找的資料都後面,光是第一個Find就用掉很多時間
我試了向上尋找,整體的時間差了近20秒,還有Select、 Selection、Activate也會因為螢幕的處理速度影響到整體尋找的速度

TOP

回復 12# boblovejoyce

如版大的回答,需要那麼多逗點,是省略參數或默認預設值,最後的2則是XlSearchDirection的值如下說明,它可以用名稱或值表示之
名稱               值         描述
xlNext            1    搜尋範圍中的下一個符合值。
xlPrevious     2     搜尋範圍中的上一個符合值。

TOP

        靜思自在 : 得理要饒人,理直要氣和。
返回列表 上一主題