Dictionary -  字典对象相当于一种联合数组,它是由具有唯一性的关键字(Key)和它的项(Item)联合组成。

基本寫法:

set d = createobject("scripting.dictionary")

d.add(key, item) 製造一個關鍵字,並賦予給他一個相關值=> 可縮寫為 d(key) = item .. ex : d(arr(i,2)) = 2

d.exists(d(keys)) 看關鍵字是否存在=> ex: if not d.exists(arr(i,1)) then do sth

d.items 看所有的相關值=> ex: r = d.items 

                                                range("B1").resize(ubound(arr,1)) = transpose(r)

d.keys 看所有的關鍵子 => ex: r = d.keys

                 range("B1").resize(ubound(arr,1)) = transpose(r)


範例A:用dictionary達成Vlookup的功能

Sub 整理數據()

Dim Arr, Brr
Dim d

Set d = CreateObject("scripting.dictionary")

RS1_B = Sheets(1).[B63365].End(xlUp).Row
Arr = Sheets(1).Range("A1:G" & RS1_B)


For i = 2 To UBound(Arr, 1)
d(Arr(i, 3)) = i        

Next              

'用d(arr(i,3)) = i 來找出搜尋值的列數,最後在用Cells(i,3) = Arr(d(brr(i,1)),2) 將數值填入

RS2_B = [B63365].End(xlUp).Row
Brr = Range("B2:G" & RS2_B)

For i = 1 To UBound(Brr, 1)
If d.exists(Brr(i, 1)) Then
Brr(i, 2) = Arr(d(Brr(i, 1)), 2)    
                                               
Brr(i, 3) = Arr(d(Brr(i, 1)), 4)
Brr(i, 4) = Arr(d(Brr(i, 1)), 5)
Brr(i, 5) = Arr(d(Brr(i, 1)), 6)
Brr(i, 6) = Arr(d(Brr(i, 1)), 7)

 '因先前d(Arr(i,3)) = i的關係,此處Arr(d(Brr(i,1))),2),因Brr(i,1) = Arr(i,3)

 '所以最後會變成 Arr(i,2),把sheet(1)的資料填到了sheets(2)

End If
Next

Crr = Application.WorksheetFunction.Index(Brr, 0, 2)   
Drr = Application.WorksheetFunction.Index(Brr, 0, 3)
Errr = Application.WorksheetFunction.Index(Brr, 0, 4)
Frr = Application.WorksheetFunction.Index(Brr, 0, 5)
Grr = Application.WorksheetFunction.Index(Brr, 0, 6)

  '用 變數 = worksheetfunction.index(陣列,列,欄) 抓出特定列/欄數,在貼上指定的儲存格


Range("C2:C" & RS2_B) = Crr                                         
Range("D2:D" & RS2_B) = Drr                                         
Range("E2:E" & RS2_B) = Errr                                       
Range("F2:F" & RS2_B) = Frr
Range("G2:G" & RS2_B) = Grr

 '要將一個陣列貼上儲存格時,不可以指定單一儲存格,要選擇一個範圍。

 'ex: range("D1:D10") = Arr  (O)

' range("D1") = Arr (X) =>此寫法只會將Arr的第一項的值貼上去而已

arrow
arrow
    文章標籤
    VBA Dictionary
    全站熱搜

    chrisovo 發表在 痞客邦 留言(0) 人氣()