返回列表 上一主題 發帖

[發問] 資料處理-找出唯一的資料

回復 1# hugh0620
  1. Sub Ex()
  2. Set d = CreateObject("Scripting.Dictionary")
  3. ar = Range("A1").CurrentRegion.Value
  4. For i = 1 To UBound(ar, 1)
  5.   If d(ar(i, 1)) = "" Then
  6.      d(ar(i, 1)) = ar(i, 2)
  7.      ElseIf InStr(d(ar(i, 1)), ar(i, 2)) = 0 Then
  8.      d(ar(i, 1)) = d(ar(i, 1)) & "/" & ar(i, 2)
  9.   End If
  10. Next
  11. [J:K] = ""
  12. [J1].Resize(d.Count, 1) = Application.Transpose(d.keys)
  13. [K1].Resize(d.Count, 1) = Application.Transpose(d.items)
  14. End Sub
複製代碼
學海無涯_不恥下問

TOP

回復 3# hugh0620
認識Dictionary   
VBA說明檔請由FileSystemObject 物件說明中的【請參閱】中搜尋

Application.Transpose(d.keys)與Application.Transpose(d.items)這只是將字典物件的索引陣列與內容陣列轉置
字典物件可用比較簡單的概念來理解
物件中會存在2個陣列keys,items
keys是儲存關鍵字的陣列
items是對應關鍵字的內容陣列
每一個key會對應一個item
這兩個陣列存在是橫向排列,所以,當要寫入儲存格時,必須轉成與儲存格同向的陣列
若以物件的add方法加入元素時,如果關鍵字(key)重複時會產生錯誤,必須先檢查是否已經存在該項目(這個特性用來取得不重複清單)
使用diction(key)=item這樣的方式加入項目,會以後來的item取代原先 的item
若有任何問題,歡迎提出討論,也請對此物件熟悉的朋友加入討論
學海無涯_不恥下問

TOP

回復 9# hugh0620


    多項目比對,你的意思是說多欄位相同為一個項目嗎?
這樣可以把多欄位字串連接後當成關鍵字,就能達到多欄位比對
至於擬將keys與items另外以陣列變數轉換,我不以為然,因為keys與items原本就是兩個陣列
只是名稱不同罷了,用法是否比較有彈性,應該也是視情況而定
學海無涯_不恥下問

TOP

        靜思自在 : 【為善競爭】人生要為善競爭,分秒必爭。
返回列表 上一主題