bsreekanth
Dictionary對象,如果我沒看錯的第一次作爲VB腳本2的一部分在1996年退出,後來被添加到VB Scripting運行時庫(scrrun.dll)中。要使用Dictionary對象,您必須添加對Microsoft腳本運行時的引用。
添加項目到字典的語法是
DictObject.Add **<Unique key>**,Value
的關鍵必須是唯一否則你會得到一個錯誤。讓我們介紹不同的場景以瞭解它的工作原理。
讓我們舉個例子
我們存儲行(而不是單元格文本),然後檢索行號
Sub Sample()
Dim spRange As Range
Dim Dict As Dictionary
Dim j as long
Set spRange = Range("A1:A10")
Set Dict = New Dictionary
j = 1
For Each cell In spRange
Dict.Add j, cell.Row
j = j + 1
Next cell
Dim x As Variant
For Each x In Dict
Debug.Print Dict(x)
Next
End Sub
如果您發現我使用變量「j」創建唯一鍵,然後存儲行值。
要檢索存儲的行值,我然後遍歷Dictionary對象。
現在回到你的問題。
後來,我檢索行,需要訪問第一個元素的值。
這是我有點困惑的一部分。原因在於,如果您想要獲得spRange範圍內特定行的值,那麼爲什麼您要使用字典對象?
您可以使用此代碼
Debug.print spRange.Cells(1, 1).Value
直接獲得的價值。如果你仍然想使用字典對象,那麼你可以使用下面的代碼
Sub Sample()
Dim spRange As Range
Dim Dict As Dictionary
Set spRange = Range("A1:A3")
Set Dict = New Dictionary
j = 1
For Each cell In spRange
Dict.Add j, cell.Row
j = j + 1
Next cell
Dim x As Variant
For Each x In Dict
Debug.Print spRange.Cells(Dict(x), 1).Value
Next
End Sub
,如果你的目的是要將範圍值存儲在字典中,然後基於特定鍵(行號)檢索該值,然後您可以使用此代碼
Sub Sample()
Dim spRange As Range
Dim Dict As Dictionary
Set spRange = Range("A1:A3")
Set Dict = New Dictionary
For Each cell In spRange
'~~> See how I reversed it?
Dict.Add cell.Row, cell.Text
Next cell
Dim x As Variant
For Each x In Dict
Debug.Print Dict(x)
Next
'OR
'Debug.Print Dict(2)
End Sub
現在最後一點。如果你不打算循環Dictionary對象來檢索值,但打算使用類似「Debug.Print Dict(2)」的東西,那麼我會建議使用額外的一段代碼,它首先檢查元素是否存在或不,然後顯示它。例如
If Dict.Exists(2) Then Debug.Print Dict(2)
HTH
讓我知道如果您有任何問題。
希德
'Row'只是行號:如果你想存儲的全部行,然後使用'cell.EntireRow' – 2012-02-22 21:28:07
如果你想獲取存儲在字典中的值,只需使用'字典。項目(x)'其中'x'是行號。如果要檢索存儲在另一列中的值,請使用'Cells(x,y).Value',其中'x'是行號,'y'是列號。 – Cutter 2012-02-22 22:25:56