Excel VBA – 访问元素的范围

新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脚本2的一部分出现的,后来被添加到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 

如果您注意到我正在使用variables“j”创build唯一键,然后存储行值。

为了检索存储的行值,我然后遍历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)”的东西,那么我会build议使用额外的一段代码,首先检查元素是否存在或不,然后显示它。 例如

 If Dict.Exists(2) Then Debug.Print Dict(2) 

HTH

如果您有任何问题,请告诉我。

希德