- 帖子
- 1567
- 主題
- 40
- 精華
- 0
- 積分
- 1591
- 點名
- 0
- 作業系統
- Windows 7
- 軟體版本
- Excel 2010 & 2016
- 閱讀權限
- 100
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2020-7-15
- 最後登錄
- 2026-2-2
|
回復 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 |
|