返回列表 上一主題 發帖

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

回復 12# 准提部林


    請教前輩 範例中的判斷式 以字串比大小! 是以什麼規則比大小或等於?
If Crr(j)(k, 9 + j) <= Arr(i, 1) And Crr(j)(k, 11 + j) >= Arr(i, 1) Then

自己有測試,但是無法了解規則!顛覆後學的認知! 以為只有數字才能比較!
Sub TEST_20220719()
If [A2] > [A3] Then
   MsgBox "[A2] > [A3]"
   Else
      MsgBox "[A2] <= [A3]"
End If
End Sub


您的範例完整內容如下:
Sub TEST_A2()
Dim Arr, Brr, Crr(2), xD(2), T$, i&, j%, k, Km%, TM
TM = Timer
Crr(1) = Range([L!m1], [L!a1].Cells(Rows.Count, 1).End(xlUp))
Crr(2) = Range([R!m1], [R!a1].Cells(Rows.Count, 1).End(xlUp))
For j = 1 To 2
    Set xD(j) = CreateObject("Scripting.Dictionary")
    For i = 2 To UBound(Crr(j))
        T = Left(Crr(j)(i, j + 9), 7)
        If Not IsObject(xD(j)(T)) Then
           Set xD(j)(T) = CreateObject("Scripting.Dictionary")
        End If
        xD(j)(T)(i) = ""
    Next i
Next j
Arr = Range([序號!a1], [序號!a1].Cells(Rows.Count, 1).End(xlUp))
ReDim Brr(1 To UBound(Arr), 1 To 2)
Brr(1, 1) = "工單號碼": Brr(1, 2) = "位置"
For i = 2 To UBound(Arr)
   T$ = Left(Arr(i, 1), 7)
   Km = 0
   For j = 1 To 2
      If Not IsObject(xD(j)(T)) Then
         GoTo 666
      End If
      For Each k In xD(j)(T).keys
         If Crr(j)(k, 9 + j) <= Arr(i, 1) And Crr(j)(k, 11 + j) >= Arr(i, 1) Then
            Brr(i, 1) = Crr(j)(k, j)
            Brr(i, 2) = Mid("LR", j, 1) & k
            Km = 1
            Exit For
         End If
      Next
      If Km = 1 Then
         Exit For
      End If
     
666
   Next j
Next i
[序號!b1].Resize(UBound(Brr), 2) = Brr
MsgBox Timer - TM
End Sub

謝謝 前輩指導!

TOP

回復 12# 准提部林


    前輩不好意思!
您原本的程式碼太精簡了!後學整理成看得懂的!
所以樓上說是您原本的程式碼!其實是後學有編輯過的!
對不起!

TOP

回復 29# 准提部林


    謝謝前輩指導!

TOP

        靜思自在 : 為人處世要小心細心,但不要「小心眼」。
返回列表 上一主題