Board logo

標題: [發問] 依名稱對應到編號(重複的名稱要顯示出來) [打印本頁]

作者: Changbanana    時間: 2017-2-9 16:38     標題: 依名稱對應到編號(重複的名稱要顯示出來)

請教各位大大~
資料比對的問題
過往都是依編號來對應名稱
現在想要名稱去對應編號
想要在工作表一
[attach]26580[/attach]
和工作表二比對
[attach]26581[/attach]

第一筆名稱(香香)在工作表二name比對發現有重複名字
要在旁邊顯示重複的名稱
[attach]26582[/attach]
第二筆名稱(蕉蕉)在工作表二name比對只有一個名字
no 就帶入002
第三四筆(好好.吃吃)在工作表二name比對不到就顯示空值不裡它
最後結果呈現
[attach]26583[/attach]
想請教這要怎麼處理 以下是附檔
[attach]26579[/attach]

原本是想說可以利用dictionary物件 但發現物件需要有個key值 和item
這樣key值代表name ,item代表no.
之後後續就不知道該如何繼續寫了 0.0
作者: hcm19522    時間: 2017-2-9 18:50

B2:B5=IFERROR(IF(G2="",VLOOKUP(A2,IF({1,0},工作表2!B:B,工作表2!A:A),2,),""),"")
G2:G5=IF(COUNTIF(工作表2!B:B,A2)>1,A2,"")
作者: Changbanana    時間: 2017-2-9 23:52

回復 2# hcm19522


謝謝你的解答~
大大的函數真的好厲害無所不能
筆數少的時候可以先用公式完成^^
但若現在有好幾千筆資料的話
可能會跑很久@@
不過還是很謝謝你
作者: Kubi    時間: 2017-2-14 09:53

回復 1# Changbanana
用了一個Dictionary物件,看看執行速度是否能提升?
  1. Sub test()
  2.     Dim d As Object
  3.     Set d = CreateObject("Scripting.Dictionary")
  4.     Dim arr, brr()
  5.     With Sheets("工作表2")
  6.         er = .[A65536].End(3).Row
  7.         arr = .Range("A2:B" & er)
  8.     End With
  9.     For i = 1 To UBound(arr)
  10.         If d.exists(arr(i, 2)) Then
  11.             d(arr(i, 2)) = "↑"
  12.         Else
  13.             d(arr(i, 2)) = "'" & arr(i, 1)
  14.         End If
  15.     Next i
  16.     With Sheets("工作表1")
  17.         .Range("G2:G65536").ClearContents
  18.         er = .[A65536].End(3).Row
  19.         arr = .Range("A2:B" & er)
  20.     End With
  21.     For i = 1 To UBound(arr)
  22.         If d.exists(arr(i, 1)) Then
  23.             If d(arr(i, 1)) = "↑" Then
  24.                 arr(i, 2) = ""
  25.                 n = n + 1
  26.                 ReDim Preserve brr(1 To n)
  27.                 brr(n) = arr(i, 1)
  28.             Else
  29.                 arr(i, 2) = d(arr(i, 1))
  30.             End If
  31.         Else
  32.             arr(i, 2) = ""
  33.         End If
  34.     Next i
  35.     Sheets("工作表1").[A2].Resize(UBound(arr), 2) = arr
  36.     Sheets("工作表1").[G2].Resize(UBound(brr), 1) = Application.Transpose(brr)
  37.     Set d = Nothing
  38.     arr = ""
  39.     Erase brr
  40. End Sub
複製代碼

作者: Changbanana    時間: 2017-2-15 11:59

回復 4# Kubi

    謝謝您的幫忙
    DICTIONARY真的很強大
    我還在學習中.....
    想請教你一下
         If d.exists(arr(i, 2)) Then
            d(arr(i, 2)) = "↑"
        Else
            d(arr(i, 2)) = "'" & arr(i, 1)
        End If
   中的 d(arr(i, 2)) = "↑" 看不大懂,可幫忙解釋一下嗎
    謝謝您
作者: Kubi    時間: 2017-2-15 20:54

回復 5# Changbanana

這 "↑" 並沒有特別的意義,只是隨手拿來做為底下判斷式驗證用而已,因此你也可以用其他符號來代替喔。




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