Board logo

標題: [發問] 重複比對 [打印本頁]

作者: yuras    時間: 2011-2-13 18:04     標題: 重複比對

[attach]4712[/attach]

小妹我只會比對單一值 (vlookup),若需要重複比對 真的用到昏倒 :L
我有一份資料(sheet1) 需要比對 王小明+購買日期 帶出發票號碼 (sheet2資料)
麻煩各位高手了 謝謝 :P
作者: gong    時間: 2011-2-13 18:54

2!插入一欄
A1=B1&C1下拉
1!D2=VLOOKUP(B2&A2,2!A:D,4,0)
作者: yuras    時間: 2011-2-13 19:32

2!插入一欄
A1=B1&C1下拉
1!D2=VLOOKUP(B2&A2,2!A,4,0)
gong 發表於 2011-2-13 18:54



    謝謝 :)
作者: Hsieh    時間: 2011-2-13 20:28

D2陣列公式
{=INDIRECT("'2'!C"&SMALL(IF((('2'!$B$2:$B$25=A2)*('2'!$A$2:$A$25=B2)),ROW($C$2:$C$25),""),1))}
作者: ANGELA    時間: 2011-3-8 08:36

=LOOKUP(2,1/('2'!$A$1:$A$25='1'!B2)*('2'!$B$1:$B$25='1'!A2),'2'!$C$1:$C$25)
作者: Andy2483    時間: 2023-3-15 10:32

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

回復 1# yuras
回復 4# Hsieh


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

資料表:
[attach]35947[/attach]

結果表執行前:
[attach]35948[/attach]

執行結果:
[attach]35949[/attach]



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

本帖最後由 hcm19522 於 2023-3-15 11:34 編輯

D2:D4{=VLOOKUP(A2&B2,IF({1,0},'2'!B$2:B$25&'2'!A$2:A$25,'2'!C$2:C$25),2,)
作者: hcm19522    時間: 2023-3-15 11:25

本帖最後由 hcm19522 於 2023-3-15 11:34 編輯

https://blog.xuite.net/hcm19522/twblog/590757733




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)