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" для создания уникальных ключей, а затем сохраняю значения строк.
Чтобы извлечь сохраненные значения строк, я затем перебираю объекты словаря.
Теперь вернемся к вашему вопросу.
позже я извлекаю строку, и мне нужно получить доступ к значению первого элемента.
Это та часть, где я немного растерялся. Причина в том, что если вы хотите просто получить значение определенной строки в диапазоне 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)
НТН
Дайте мне знать, если у вас есть какие-либо вопросы.
Сид