先給個(gè)簡化版的字典基本語句:
基本功能已經(jīng)盡在其中了。 如能熟練掌握,則可游刃有余。 Sub DicTest() Set Dic = CreateObject('Scripting.Dictionary') 'use Dictionary '引用字典 【按后期綁定方式引用,這樣代碼比較通用?!?/span> ' 如采取前期綁定 Dim Dic as New Dictionary 則可能有些電腦沒有引用Scripting Runtime設(shè)置而不能用 '語法:Dic(Key) = Item 將[關(guān)鍵詞/項(xiàng)目]同時(shí)加入字典 并能忽略關(guān)鍵詞不存在錯(cuò)誤 Dic('A') = 'A1' 'Add [key/item] if key is new '如果key不存在則直接加入[key/item] Dic('A') = 'A2' 'Cover [item] if key is exists without Err '如果key存在則覆蓋更新item 且不產(chǎn)生key存在的錯(cuò)誤提示 '因此本質(zhì)上,用這個(gè)方法給字典賦值、比使用 Dic.Add 更好! '(如需要對key存在進(jìn)行錯(cuò)誤處理,可使用Dic.Exists(key)方法,更加靈活。例子在下面 Dic.key('A') = 'B' 'Change exists key to new key and erase old key '當(dāng)key和item已經(jīng)存在時(shí),更新key內(nèi)容但保留已經(jīng)存在的item內(nèi)容。 '其實(shí)這個(gè)語句實(shí)際意義不大。即實(shí)際使用的情況很少,幾乎沒有。 '備注:也可以用 tmp = Dic('A') : Dic.Remove('A') : Dic('B')= tmp來完成。 Dic('B') = 'B1' 'Cover [item] if key is exists Dic('C') = 'C1' 'Add [key/item] if key is new Dic(1) = 1 'you can use number as key '通常使用Sting文本字符串作為字典key關(guān)鍵詞,也可以使用數(shù)字、數(shù)值作為key '但特別提醒: 如果整個(gè)字典關(guān)鍵詞中既有數(shù)字又有字符串,應(yīng)統(tǒng)一為字符串格式以提高效率 '否則運(yùn)行速度可能會慢十倍以上。 '速度差異: 純數(shù)字>純文本字符>>>文本/數(shù)值混合型 '下面是Dic.Exists(key)方法的常用模式: 和If判斷結(jié)合起來使用 For i = 1 To 2 If Not Dic.Exists(i) Then Dic(i) = i 'if key not exists then add [key/item] '如果檢查發(fā)現(xiàn)字典中尚不存在關(guān)鍵詞、則加入字典 (一般會這么用) Else Dic(i) = Dic(i) * 10 'if key exists then Change [item] '如果檢查發(fā)現(xiàn)字典中已經(jīng)存在關(guān)鍵詞、則更新字典中key對應(yīng)的item (或什么也不做) End If Next '提取字典中keys/items結(jié)果分別得到各自的一維數(shù)組、順序?yàn)榧尤胱值鋾r(shí)的先后順序 kr = Dic.keys 'Get keys result as Array tr = Dic.items 'Get items result as Array '循環(huán)遍歷字典中的keys/items內(nèi)容 For i = 0 To Dic.Count - 1 t1 = kr(i) t2 = tr(i) Next '把字典中keys/items結(jié)果分別輸出到工作表的某一列 [a1].Resize(Dic.Count) = WorksheetFunction.Transpose(Dic.keys) 'Output keys result [b1].Resize(Dic.Count) = WorksheetFunction.Transpose(Dic.items) 'Output items result End Sub 需要注意的是,一般推薦把工作表區(qū)域中的內(nèi)容讀入VBA內(nèi)存數(shù)組,然后再使用。 此時(shí)得到的結(jié)果,默認(rèn)都已經(jīng)是Range(Rng).Value ,所以字典使用不會有問題。 但有些初學(xué)者會直接引用單元格使用,此時(shí)必須按 Dic(Range('A1').Value) = item 方式使用字典。 否則即會錯(cuò)誤地把 Range('A1')裝入字典而產(chǎn)生非預(yù)期的結(jié)果。 話說,我到現(xiàn)在也不知道,把Range()對象裝入字典有何實(shí)際意義。也許只是一種未排除的錯(cuò)誤用法。 所以我的建議是:大家完全不需要考慮Dic(Range())這樣的用法。 |
|