返回列表 上一主題 發帖

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

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

本帖最後由 hugh0620 於 2012-3-26 10:35 編輯

Dear 大大們
          小弟經常需要對重覆多筆數據將其濃縮成唯一的資料~
          在這個處理上,基本的作法都是採用[進階篩選]的方式,先將資料處理成唯一後,
          再進行後續加工成為需要的結果~
          最多處理的是兩欄的資料,如附檔及下圖
          依data A為主,將符合data A的data B資料找出來~
          像這樣的資料,我的處理方式大概如下
          1. [進階篩選]AB欄位,選擇不重覆
          2. [進階篩選]的結果,再用迴圈+IF判斷得到最後的結果
          拋出這個問題,請大大有教於我

資料處理.rar (10.72 KB)
學習才能提升自己

謝謝論壇,謝謝各位前輩
後學藉此帖練習陣列與字典,學習方案如下,請各位前輩指教

執行前:


執行結果:


Option Explicit
Sub TEST()
Dim Brr, Y, i&, T1$, T2$, xR As Range
Set Y = CreateObject("Scripting.Dictionary")
Set xR = Range([B1], Cells(Rows.Count, "A").End(xlUp)): Brr = xR
For i = 1 To UBound(Brr)
   T1 = Brr(i, 1): T2 = Brr(i, 2)
   If Y(T1) = "" Then
      Y(T1) = Y.Count: Brr(Y(T1), 1) = T1: Brr(Y(T1), 2) = T2
      ElseIf InStr(Brr(Y(T1), 2), T2) = 0 Then
         Brr(Y(T1), 2) = Brr(Y(T1), 2) & "/" & T2
   End If
Next
xR.Offset(0, 9).ClearContents: xR.Offset(0, 9).Resize(Y.Count, 2) = Brr
Set Y = Nothing: Set xR = Nothing: Erase Brr
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 9# hugh0620
可附上檔案看看

TOP

回復 9# hugh0620


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

TOP

回復 6# GBKEE

   G大大~ 也需要請您再指教一番~

   小弟亦針對在比對上再提出一些問題,請大大們再有教於我
   Dictionary 在處理的是二維的比對~ 亦既是兩兩比較~
   若是想要比對3~N個項目的話~ 大大是否有其他更好的處理方式~
   可以教導一下
學習才能提升自己

TOP

回復 4# Hsieh

   Hsieh 大大~ 很謝謝你的指導~
   仔細的去了解Dictionary的說明與您的程式碼~
   在應用上受益良多~  在兩個比對上的應用不用像以前要多次篩選後~ 才能完成~

   小弟亦針對在比對上再提出一些問題,請大大們再有教於我
   Dictionary 在處理的是二維的比對~ 亦既是兩兩比較~
   若是想要比對3~N個項目的話~ 大大是否有其他更好的處理方式~
   可以教導一下
  1. a = d.keys
  2. b = d.items
  3. For i = 0 To d.Count - 1
  4.     Range("J" & 1 + i) = a(i)
  5.     Range("K" & 1 + i) = b(i)
  6. Next
  7. '透過Dictionary的範例說明~ 用另外一種比較直覺的表達方式
  8. '與您寫的下面兩行可以達到一樣的功能~
  9. '大大寫的是進階的用法~ 小弟喜歡拆成自己比較直覺的用法~
  10. '不然硬是去套用~ 就比較沒有彈性
  11. '[J1].Resize(d.Count, 1) = Application.Transpose(d.keys)
  12. '[K1].Resize(d.Count, 1) = Application.Transpose(d.items)
複製代碼
學習才能提升自己

TOP

回復 6# GBKEE


    謝謝G大大~ 教導~ 小弟會好好理解的~
學習才能提升自己

TOP

回復 3# hugh0620
'["Scripting.Dictionary"]<==這是什麼意思呢??,'因為大大有些時候用的方式,按F1是查不到的
Dictionary 物件 ->字典物件 : 就像查字典 ,查到一個關鍵字(Key)後有相對的說明 (Item)
Key  該關鍵字用來取出單個項目,通常是整數或字串,可以是除陣列外的任何型態
Item  可以是任何型態的

查看 Dictionary 物件 的說明 如圖

TOP

回復 4# Hsieh


    Hsieh 大大~ 這個東西比較抽象一些~ 要花點時間來消化一下~
    小弟再將理解的結果~ 分享一下~ 再請大大指正一下~
學習才能提升自己

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

        靜思自在 : 能善用時間的人,必能掌握自己努力的方向。
返回列表 上一主題