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: - )
感谢
答案 0 :(得分:3)
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 Objects。
现在回到你的问题。
稍后,我检索该行,并需要访问第一个元素的值。
这是我有点困惑的部分。原因是,如果您只想获取范围 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
如果您有任何问题,请与我们联系。
西特