返回列表 上一主題 發帖

查詢如何陣列,加快化?

查詢如何陣列,加快化?

If [c1].Value = "" Then MsgBox "填寫key", , "提示 Exit Sub"
Sheets("search").Rows("4:10000").ClearContents
Dim rnga As Range, rw%, arr
With Sheets("search")
    For Each rnga In Sheets("data").UsedRange
    Set rnga = rnga.Find([c1])
        r = .UsedRange.Rows.Count + 1
        If Not rng Is Nothing Then
            .Cells(r, 1).Resize(1, 6).Value = Sheets("data").Cells(rnga.Row, 1).Resize(1, 6).Value
        End If
    Next
因數據有數千筆,若查詢結果數據過多,會卡很久,請問如何加快?
希望支持!

請上傳檔案並說明需求條件及規則~~

TOP

本帖最後由 s7659109 於 2019-3-8 15:54 編輯

需求:在工作表search c1 key 入關鍵字可全部欄位查詢(從工作表data),但筆數少ok,但筆數太多,會卡,請問該如何改?

1080308search.zip (20.22 KB)

希望支持!

TOP

回復 1# s7659109
  1. Sub ex()
  2. Dim Ar(), A As Range, s&, k&
  3. With Sheets("data")
  4. k = .[A4].End(xlToRight).Column
  5. For Each A In .Range(.[A5], .[A5].End(xlDown))
  6.    mystr = Join(Application.Transpose(Application.Transpose(A.Resize(, k))), Chr(10))
  7.    If InStr(mystr, Sheets("search").[C1]) > 0 Then
  8.    ReDim Preserve Ar(s)
  9.    Ar(s) = Split(mystr, Chr(10))
  10.    s = s + 1
  11.    End If
  12. Next
  13. If s > 0 Then Sheets("search").[A3].Resize(s, k) = Application.Transpose(Application.Transpose(Ar))
  14. End With
  15. End Sub
複製代碼
學海無涯_不恥下問

TOP

If InStr(mystr, Sheets("search").[C1]) > 0 Then
  s = s + 1
   ReDim Preserve Ar(s)
   Ar(s) = Split(mystr, Chr(10))
    End If
問題:有看過 s = s + 1放在這個位置,但本代碼出現型態不符,差異為何?
另請教 若改成在data工作表直接查詢,以事件方式,做到隱藏(不是查詢資料),縮放功能。

1080310search事件.rar (16.15 KB)

希望支持!

TOP

回復 5# s7659109
你的問題是變動陣列大小時,將上限值先設與後設的差異
因為陣列起始值在沒有設定下是從0開始,若你是將s=s+1放在ReDim之前,那麼陣列上限是0的情況下
你卻要給陣列Ar(1)設定值,這樣就會出現超出陣列索引範圍的錯誤
底下適用儲存格Change事件供你參考
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. If Target.Address = "$AB$2" Then
  3. Range("A:A").EntireRow.Hidden = False
  4. For Each A In Range([A5], [A5].End(xlDown))
  5.   If InStr(Join(Application.Transpose(Application.Transpose(A.Resize(, 31))), Chr(10)), [AB2]) = 0 Then A.EntireRow.Hidden = True
  6. Next
  7. End If
  8. End Sub
複製代碼
學海無涯_不恥下問

TOP

謝謝,Hsieh的解說。
希望支持!

TOP

        靜思自在 : 一句溫暖的話,就像往別人身上灑香水,自己會沾到兩三滴。
返回列表 上一主題