返回列表 上一主題 發帖

[發問] 請益 是否有更快的查詢方式

本帖最後由 singo1232001 於 2021-8-2 09:01 編輯

回復 19# 准提部林


保持實驗學習精神
跟准大學到好多字典寶貴的技巧

最後回頭繼續測試
原來先轉陣列還可以在加速

目前也把時間壓縮成功!
順便奉上檔案參考

另外也測試了 陣列與字典的適用區間 真的好好玩!

3維陣列工單查詢 v4 v1.zip (971.39 KB)

陣列與字典測速1.zip (17.35 KB)

TOP

我測試了一下,大部分L跟R都有符合的BarCode啟始及結束條件的工單號碼,
所以L先找或R先找會有不同的答案?

例如
   BarCode              符合位置
A2 CYR128401TG0WLX2H        R42,L38
A3 CYR128401600WLX2U        R42,L3,L38
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

本帖最後由 singo1232001 於 2021-8-3 18:17 編輯

回復 22# ML089


如果是指我的這份檔案的話  "3維陣列工單查詢 v4 v1"
執行後的結果有異常 有漏缺資料
是我的vba裡面有bug

Sub tttt()
t = Timer
Dim L As Worksheet
Dim R As Worksheet
Dim S As Worksheet

Dim i%, j%, w%, rw%, a%
Dim x As String
Dim TX As String


Set L = Sheets("L")
Set R = Sheets("R")
Set S = Sheets("OP")
f = S.Columns("A").Find("*", , -4163, , 1, 2).Row
f0 = L.Columns("A").Find("*", , -4163, , 1, 2).Row
f1 = R.Columns("A").Find("*", , -4163, , 1, 2).Row

ss = S.Range("A2").Resize(f, 1)
SL = L.Range("A2").Resize(f0, 12)
SR = R.Range("B2").Resize(f1, 12)
...

紅色的地方我打錯了 應該是R
狀況是 會有許多資料沒抓到
昨天晚上才發現的
附上修改好的檔案

3維陣列工單查詢 v4 v2.zip (975.69 KB)

TOP

字典這一塊  我真的很不熟
最近才開始接觸
准大真的太強了!!每次發問都學到不少
感謝幫忙

TOP

回復 23# singo1232001

誤會了! 不是說你程式的問題

我作全比對L R兩個資料表,大部分這兩組資料表裡都有符合的位置,
因為大家的程式都是先比查詢L表在查詢R表,
我在練習時將查詢順序改為先比查詢R表在查詢L表,答案跟大家不同
所以發現資料去比對 起始BarCode 跟 結束BarCode,在L R表都有答案,滿奇怪的。

Sub LR全部比對()
    Dim LR(1 To 2), SN
    TM = Timer
    Set SN = Sheets("序號")
    LR(1) = [L!A1:L1].Resize([L!J65536].End(xlUp).Row)
    LR(2) = [R!B1:M1].Resize([R!J65536].End(xlUp).Row)
    Arr = SN.[A1].Resize(SN.[A65536].End(xlUp).Row, 3)
    ReDim Brr(1 To UBound(Arr), 1 To 4)
    Brr(1, 1) = "工單號碼": Brr(1, 2) = "LR位置": Brr(1, 3) = "起始BarCode": Brr(1, 4) = "結束BarCode"
    For i = 2 To UBound(Arr)
        Key = "": Wno = ""
        For j = 1 To 2
            For k = 2 To UBound(LR(j))
                If LR(j)(k, 10) <= Arr(i, 1) And Arr(i, 1) <= LR(j)(k, 12) Then
                    'Brr(i, 1) = LR(j)(k, 1)
                    'Brr(i, 2) = LR(j)(k, 3) & k
                    'Km = 1: Exit For
                    
                    Brr(i, 1) = Brr(i, 1) & "," & LR(j)(k, 1)      'L R 工單號碼
                    Brr(i, 2) = Brr(i, 2) & "," & LR(j)(k, 3) & k  'L R 位置
                    Brr(i, 3) = Brr(i, 3) & "," & LR(j)(k, 10) & k 'L R 起始Barcode
                    Brr(i, 4) = Brr(i, 4) & "," & LR(j)(k, 12) & k 'L R 結束Barcode
                End If
            Next
            'If Km = 1 Then Km = 0: Exit For
        Next
    Next
    SN.[D1].Resize(UBound(Arr), 4) = Brr
    SN.Range("D2,E3,F2,G2").Columns.AutoFit
    Debug.Print Timer - TM
End Sub
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 25# ML089


    確實跟你講的一樣 有重複

3維陣列工單查詢 v4 v3.zip (824.46 KB)

TOP

        靜思自在 : 【為善競爭】人生要為善競爭,分秒必爭。
返回列表 上一主題