Option Explicit
Sub Test()
Dim Brr, Crr, Y, i&, T$
'↑宣告變數:(Brr,Crr,Y)是通用型變數,i是長整數,T是字串變數
Set Y = CreateObject("Scripting.Dictionary")
'↑令Y這通用型變數是 字典
Brr = Sheets("1").UsedRange
'↑令Brr這通用型變數是二維陣列,以表1有使用儲存格值帶入
Crr = Sheets("2").UsedRange
'↑令Crr這通用型變數是二維陣列,以表2有使用儲存格值帶入
For i = 2 To UBound(Crr)
'↑設順迴圈!i從2到 Crr縱向最大索引列號
T = Crr(i, 1) & "|" & Trim(Crr(i, 2))
'↑令T這字串變數是 i迴圈列第1欄Crr陣列值連接"|"再連接
'i迴圈列第2欄Crr陣列值去除頭尾空白字元後的新字串
If Y.Exists(T) Then
'↑如果查Y字典裡有 T變數這key?
If Split(Y(T), "|")(1) <> Trim(Crr(i, 3)) Then
'↑如果以T變數查Y字典回傳item值用"|"分割後的一維陣列1索引號
'陣列子 不同於 i迴圈數第3欄Crr陣列值去除頭尾空白字元的新字串?
MsgBox T & " 資料有複選,請確認": Exit Sub
'↑跳出提示窗~~ :按確認後結束程式執行
End If
Else
Y(T) = i & "|" & Trim(Crr(i, 3))
'↑否則就以T變數為key,item是 i迴圈數連接"|"再連接
'i迴圈數第3欄Crr列值去除頭尾空白字元的新字串後的新字串,
'納入Y字典
End If
Next
For i = 2 To UBound(Brr)
'↑設順迴圈!i從2到 Brr縱向最大索引列號
T = Trim(Brr(i, 2)) & "|" & Brr(i, 1)
'↑令T這字串變數是 i迴圈列第2欄Brr陣列值去除頭尾空白字元後的新字串
'連接"|"再連接 i迴圈列第1欄Brr陣列值
Brr(i, 4) = Crr(Val((Y(T))), 3)
'↑令i迴圈列第4欄Brr陣列值是 Val((Y(T)))列第3欄Crr陣列值,
'Val((Y(T)))列:以T變數查Y字典回傳的item值轉化為數值 列
Next
[1!G1].Resize(UBound(Brr), 4) = Brr
'↑令名1的工作表從 [G1]開始擴展向下 Brr陣列縱向最大索引列號數列,
'向右擴展 4欄,這擴展範圍的儲存格以Brr陣列值帶入
End Sub作者: hcm19522 時間: 2023-3-15 11:25