返回列表 上一主題 發帖

VBA 資料搜尋問題

回復 50# Qin


1) 如果只用 "xU.AutoFilter Field:=3, Criteria1:=">=" & Ur1(3) " 這上半句語法,
在搜尋過程中, 對其他資料會不會有影響. (如: 資料搜尋出來不完整或搜尋速度緩慢等問題.)
__只針對日期篩選,不會影響其它欄位

2) 我用( .xls OR .xlsx) 共40萬筆資料搜尋時, 大概要花30秒的時間, 請問還可以加速嗎?
__改用ARRAY或許可以快些,但未實測,無法確定

3) 在編號搜尋欄位, 例如編號是 " 20000350"  "11005710"  "10003210" 而我只需鍵入 " 2*350 " 或 " 11*5710"... 也可以把資料搜出來.
__編號是〔數值〕,〔篩選〕無法用文字比對

TOP

回復 50# Qin


試試看吧:
SearchData03.rar (56.23 KB)

TOP

回復 52# 准提部林
     
     准大, 這段語法旁的附註亂碼, 麻煩你再將它寫在留言板上. 謝謝!

        ReDim Brr(1 To 60000, 1 To 10)    '­Y¸ê®Æ·|¶W¹L6¸Uµ§,¦Û¦æ§ó§ï

TOP

回復 53# Qin


如果篩選出來的資料會超過6萬筆, 將60000改為更大(多大? 自行斟酌)

TOP

回復 54# 准提部林

        准大               
                       
        我又想再請教你2個問題:               
        首先說清楚, 用你給的 "Data" 檔是沒有問題的, 但, 如使用我自己的文檔才會出現這問題.               
                       
1)        以"品名搜尋"               
        就會出現:  If Ur1(j) <> "" Then If Not Arr(i, Ur2(j)) Like Ur1(j) Then GoTo 102               
                       
        以"編號搜尋"               
        就會出現:  dd = Arr(i, 3)               
                       
        想請教是否又是因為"日期格式"的緣故.               
        如果"是", 可否請你再幫我修改, 只以"From Date" 搜尋就可以了               
                       
2)        准大, 你真的有求必應哦! 我要求以" * " 以星字鍵來做搜尋, 你也達成了我要求.               
        但是, 還有一個小小的問題,就是為何"編號 , 品名和廠商"搜尋時都必需使用 " 大字母" (Caps Lock)               
                       
        例:               
        h*1234               
        *french*               
        aa*               
        "找不到符合的資料"               
                       
        H*1234               
        *French*               
        AA*               
        搜尋結果沒問題               
                       
        可否修改成"大小字母"皆通用. 謝謝!               
                       
Search Data_180930.rar (133.7 KB)

TOP

回復 55# Qin

Sub Search_Data(Ur1, Ur2)
Dim Sht As Worksheet, Arr, Brr, i&, j%, k%, N&, dd&
Dim Mybook As Workbook, xB As Workbook, xChk%
Call Clear_All
xN = "Data.xls": Set Mybook = ThisWorkbook
On Error Resume Next: Set xB = Workbooks(xN): On Error GoTo 0
If xB Is Nothing Then
   Application.ScreenUpdating = False
   Set xB = Workbooks.Open("C:\Users\Ms Tan\Desktop\Data.xls", , 1, , "1234")
   Mybook.Activate: xChk = 1
End If
'----------------------------
ReDim Brr(1 To 400000, 1 To 10) '若資料會超過6萬筆,自行更改
For Each Sht In xB.Sheets
    If LCase(Left(Sht.Name, 4)) <> "data" Then GoTo 101
    Arr = Range(Sht.[J2], Sht.Cells(Rows.Count, 1).End(xlUp))
    For i = 1 To UBound(Arr)
        For j = 0 To 2
            If Ur1(j) <> "" Then If LCase(Arr(i, Ur2(j))) Like LCase(Ur1(j)) = False Then GoTo 102
        Next j
        dd = 0
        If IsDate(Arr(i, 3)) Then dd = Arr(i, 3)
        If dd < Ur1(3) Then GoTo 102
        N = N + 1
        For k = 1 To UBound(Brr, 2): Brr(N, k) = Arr(i, k): Next
102: Next i
101: Next
If xChk = 1 Then xB.Close 0
'----------------------------
If N = 0 Then MsgBox "找不到符合資料!": Exit Sub
With [A8:J8].Resize(N)
     .Value = Brr
     .Sort Key1:=.Item(3), Order1:=xlDescending, Header:=xlNo
     [A4:J5].Copy
     .Cells.PasteSpecial Paste:=xlFormats
End With
[A6].Select
End Sub

Sub Clear_All()
With Sheets("Search")
     If .FilterMode Then .ShowAllData
     With .UsedRange.Offset(7, 0)
          .ClearContents
          .Interior.ColorIndex = xlNone
     End With
     .[A1,C1:C3].Interior.ColorIndex = 15
     .[B1:B3].Interior.ColorIndex = 35
     .[A6].Select
End With
End Sub

Sent_01.rar (135.54 KB)

TOP

本帖最後由 GBKEE 於 2018-10-1 11:02 編輯

回復 55# Qin


    試試看

Search Data_04.zip (122.83 KB)

感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 57# GBKEE

謝謝! 我會參考..

TOP

本帖最後由 Qin 於 2018-10-3 23:17 編輯

回復 56# 准提部林

        准大
       
        我又遇到問題了….
       
1)        這次是"品名搜尋"問題, 當在B2輸入搜尋條件後,就會出現
         If Ur1(j) <> "" Then If LCase(Arr(i, Ur2(j))) Like LCase(Ur1(j)) = False Then GoTo 102
       
        因為之前受到"日期格式"的困擾, 以為這次又是什麼"文字格式"
        就跑到VBE 編輯器 Tools-> Options -> Editor Format -> Font 做修改
        無意中發現之前的亂碼現象, 可以在此獲得解決.
       
2)        在 B1, B2,B3 欄, 是以"雙摯觸動"來搜尋資料, 可否改成輸 入搜尋條件後,按 Enter 就可獲得搜尋結果.
        因為感覺比較好使用.至於多條件搜尋就保留原本的方式.
        准大, 如果這個修改會有"牽一髮而動全身"的大幅度更改, 那就免了吧!
       
        謝謝!!
SearchData_181003.rar (428.06 KB)

TOP

本帖最後由 准提部林 於 2018-10-4 10:57 編輯

回復 59# Qin

品名搜尋會出現錯誤:
__看[data]表的 G2703 為#N/A,

For j = 0 To 2
    If IsError(Arr(i, Ur2(j))) Then GoTo 102 '在這位置加這一行
    If Ur1(j) <> "" Then If LCase(Arr(i, Ur2(j))) Like LCase(Ur1(j)) = False Then GoTo 102
Next j


至於想[雙按左鍵]改成[ENTER]執行, 不建議這樣做,
CHANGE觸發, 每改一次即執行一次, 不太環保,
輸入並確定要搜尋條件無誤, 再執行程式, 才是最妥當, 差不了多少時間,
資料處理者, 有時不要嫌麻煩~~

TOP

        靜思自在 : 閒人無樂趣,忙人無是非。
返回列表 上一主題