標題:
[發問]
依名稱對應到編號(重複的名稱要顯示出來)
[打印本頁]
作者:
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物件,看看執行速度是否能提升?
Sub test()
Dim d As Object
Set d = CreateObject("Scripting.Dictionary")
Dim arr, brr()
With Sheets("工作表2")
er = .[A65536].End(3).Row
arr = .Range("A2:B" & er)
End With
For i = 1 To UBound(arr)
If d.exists(arr(i, 2)) Then
d(arr(i, 2)) = "↑"
Else
d(arr(i, 2)) = "'" & arr(i, 1)
End If
Next i
With Sheets("工作表1")
.Range("G2:G65536").ClearContents
er = .[A65536].End(3).Row
arr = .Range("A2:B" & er)
End With
For i = 1 To UBound(arr)
If d.exists(arr(i, 1)) Then
If d(arr(i, 1)) = "↑" Then
arr(i, 2) = ""
n = n + 1
ReDim Preserve brr(1 To n)
brr(n) = arr(i, 1)
Else
arr(i, 2) = d(arr(i, 1))
End If
Else
arr(i, 2) = ""
End If
Next i
Sheets("工作表1").[A2].Resize(UBound(arr), 2) = arr
Sheets("工作表1").[G2].Resize(UBound(brr), 1) = Application.Transpose(brr)
Set d = Nothing
arr = ""
Erase brr
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/)