Excel vba - доступ к элементу диапазона - PullRequest
0 голосов
/ 23 февраля 2012

новичок в vba, и интересно, как обращаться с элементами в пределах диапазона.Позже я добавляю диапазон ячеек (строк), проиндексированных с помощью идентификатора, к словарю

 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

, получаю строку и должен получить доступ к значению первого элемента.Это может быть очень легко для вас, но я не знаком с API: -)

спасибо

1 Ответ

3 голосов
/ 23 февраля 2012

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)

НТН

Дайте мне знать, если у вас есть какие-либо вопросы.

Сид

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...