vba新手,想知道如何寻址范围内的元素。我将用id索引的单元格(行)范围添加到字典
Set spRange = import.Range("A2:" & spRange.End(xlDown).Address)
For Each cell In spRange
dict.Add cell.Offset(0, 2).Text, cell.Row
Next cell
稍后,我检索该行,并需要访问第一个元素的值。
For Each x In dict
Set spRange = dict.Item(x)
'how to get value of first element of spRange
Next
这对你来说可能很容易,但我不熟悉api:-)
感谢
bsreekanth
Dictionary对象,如果我没有错的话,早在1996年就作为VB Script 2的一部分出现了,后来被添加到VB Scripting运行库(scrrun.dll)中。要使用Dictionary,必须添加对Microsoft Scripting Runtime的引用。
向字典中添加项目的语法是
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中特定行的值,那么为什么要使用dictionary对象?
您可以使用此代码直接获取值
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-
如果你有任何问题,请告诉我。
Sid