返回列表 上一主題 發帖

[發問] 列出更多的對應資料

回復 1# qaqa3296


    謝謝前輩發表此主題與範例
不論是否符合需求! 後學在此帖學到很多知識!
後學的陣列與字典練習心得註解如下:
Option Explicit
Sub TEST_1()
Dim Brr, Arr, c&, R&, V, Y, Z
Dim K$, P$, Q, S
'↑宣告變數
S = Timer
Sheets(3).[M2:P60000].ClearContents
Set Y = CreateObject("Scripting.Dictionary")
Set Z = CreateObject("Scripting.Dictionary")
Set V = CreateObject("Scripting.Dictionary")
'↑令Y,Z,V各是字典
Arr = Sheets(1).Range("A1:C" & Sheets(1).[A65536].End(3).Row)
'↑目標表 陣列範圍
For R = 1 To UBound(Arr)
'↑外順迴圈把 目標表 規格拆解,重組為模糊比對關鍵字並倒入V字典
   For c = 1 To UBound(Arr, 2)
   '↑內順迴圈去除空白字元
      Arr(R, c) = Replace(Arr(R, c), " ", "")
   Next
   P = Arr(R, 3)
   If P Like "*-*-*" Then
      P = Split(P, "-")(0) & "-" & Split(P, "-")(1)
      ElseIf P = "" Then
      '↑如果規格欄是空格 就以A欄格與B欄格組為模糊比對關鍵字
         P = Arr(R, 1) & Arr(R, 2)
   End If
   V(P) = 1
   '↑倒入V字典
   P = ""
Next
Brr = Sheets(2).Range("D1:A" & Sheets(2).[A65536].End(3).Row)
'↑庫存表 陣列範圍
For R = 1 To UBound(Brr)
'↑外順迴圈把 庫存表 規格拆解,重組再加入符號 "|" 與列數
',為模糊比對關鍵字並倒入Z字典

   For c = 1 To UBound(Brr, 2)
   '↑內順迴圈去除空白字元
      Brr(R, c) = Replace(Brr(R, c), " ", "")
      P = P & Brr(R, c) & "|"
     '↑把每列4欄的資料用 "|" 串起來
   Next
   K = Brr(R, 3)
   If K Like "*-*-*" Then
      K = Split(K, "-")(0) & "-" & Split(K, "-")(1)
      ElseIf K = "" Then
         K = Brr(R, 1) & Brr(R, 2)
   End If
   Z(K & "|" & R) = P  '@@
   '↑重組再加入符號 "|" 與列數
   P = ""
Next
For Each Q In Z.KEYS
   If V(Split(Q, "|")(0)) = 1 Then
   '↑用 "|" 拆解Z字典裡的key,字串在V字典找到,代表符合提取條件
      Y(Q) = Split(Z(Q), "|")
      '↑用Y字典裝 符合條件 的Z字典item資料  @@處
   End If
Next
Arr = Application.Transpose(Application.Transpose(Y.items))
'↑將Y字典的 items 轉置兩次 就是結果資料
Sheets(3).[M1].Resize(Y.Count, 4) = Arr
MsgBox Timer - S & "秒"
End Sub

TOP

        靜思自在 : 【行善要及時】行善要及時,功德要持續。如燒開水一般,未燒開之前千萬不要停熄火候,否則重來就太費事了。
返回列表 上一主題