返回列表 上一主題 發帖

[發問] 重複比對

本帖最後由 Andy2483 於 2023-3-15 10:34 編輯

回復 1# yuras
回復 4# Hsieh


    謝謝論壇,謝謝前輩
藉這帖今天後學再練習陣列與字典,請各位前輩指教
1.兩欄關鍵字以"|"符號組合成key
2.Item以列號在前,核複欄在後,中間以"|"符號組合
3.需讀取item中的列號時,以VAL(item)方法便可取得

資料表:


結果表執行前:


執行結果:




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
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

        靜思自在 : 我們最大的敵人不是別人.可能是自己。
返回列表 上一主題