Перейти к содержимому

VBA Excel. Объект Dictionary (свойства, методы, примеры)

Создание объекта Dictionary с помощью кода VBA Excel. Раннее и позднее связывание. Методы и свойства словаря и синтаксис выражений с ними. Примеры кода.

  1. Создание объекта Dictionary
  2. Методы и свойства словаря
  3. Примеры кода с Dictionary
Dictionary – это объект, предназначенный для записи, хранения и использования пар, состоящих из ключа и элемента данных.

Создание объекта Dictionary

Раннее связывание:

Dim myDict As Dictionary
Set myDict = New Dictionary

или

Dim myDict As New Dictionary

Позднее связывание:

Dim myDict As Object
Set myDict = CreateObject("Scripting.Dictionary")

Чтобы использовать раннее связывание, необходимо подключить в редакторе VBA ссылку на библиотеку Microsoft Scripting Runtime, если она еще не подключена (в меню Tools–>References...):

Раннее связывание позволяет использовать при написании кода VBA Excel лист выбора и вставки свойств и методов объекта Dictionary (лист подсказок):

Лист подсказок отображается автоматически после ввода точки или, в иных случаях, вызывается сочетанием клавиш «Ctrl+Пробел».

Методы и свойства словаря

Методы объекта Dictionary

Метод Add
Метод Add добавляет в словарь новую пару ключ–элемент.

Dictionary.Add Ключ, Элемент
  • Ключ – обязательный аргумент, представляющий ключ добавляемой пары.
  • Элемент – обязательный аргумент, представляющий элемент добавляемой пары.

Если добавляемый ключ в словаре уже есть, VBA Excel сгенерирует ошибку.

Метод Exists
Метод Exists возвращает логическое значение, указывающее, существует ли в словаре указанный ключ. True – указанный ключ существует, False – указанный ключ не существует.

Dictionary.Exists(Ключ)

Метод Items
Метод Items возвращает массив всех элементов в словаре.

Dictionary.Items

Метод Keys
Метод Keys возвращает массив всех ключей в словаре.

Dictionary.Keys

Метод Remove
Метод Remove удаляет из словаря одну пару ключ–элемент.

Dictionary.Remove(Ключ)

Если указанный ключ не существует, произойдет ошибка.

Метод RemoveAll
Метод RemoveAll удаляет из словаря все пары ключей и элементов.

Dictionary.RemoveAll

Свойства объекта Dictionary

Свойство CompareMode
Свойство CompareMode задает или возвращает режим сравнения ключей в словаре. Используется для чтения и записи.

Dictionary.CompareMode [Сравнение]

Необязательный аргумент Сравнение используется только при записи и может принимать следующие значения:

  • –1 (vbUseCompareOption) – выполняется сравнение, заданное оператором Option Compare.
  • 0 (vbBinaryCompare) – выполняется двоичное сравнение.
  • 1 (vbTextCompare) – выполняется текстовое сравнение.

По умолчанию выполняется двоичное сравнение, при котором значение свойства CompareMode равно 0 (vbBinaryCompare).

Свойство Count
Свойство Count возвращает количество элементов в словаре. Только для чтения.

Dictionary.Count

Свойство Item
Свойство Item задает или возвращает элемент для указанного ключа в словаре. Используется для чтения и записи.

Dictionary.Item(Ключ) [= Элемент]
  • Ключ – обязательный аргумент, представляющий из себя существующий ключ для чтения или изменения существующего элемента, или новый ключ для создания новой пары ключ–элемент.
  • Элемент – необязательный аргумент, представляющий выражение, которое заменяет существующий элемент с существующим ключом или добавляет новый элемент в пару ключ–элемент с новым ключом.

Если при создании с новым ключом новой пары ключ–элемент аргумент Элемент не указан, значение элемента будет пустым (Empty).

Свойство Key
Свойство Key задает новое значение ключа для существующего ключа в словаре.

Dictionary.Key(Ключ) = Новый_Ключ
  • Ключ – обязательный аргумент, представляющий из себя существующий ключ.
  • Новый_Ключ – обязательный аргумент, представляющий выражение, значение которого заменяет существующий ключ.

Если указанный ключ отсутствует в словаре, произойдет ошибка.

Примеры кода с Dictionary

Пример 1
Заполнение словаря парами ключ-элемент и извлечение элементов с помощью свойства Item:

Sub Primer1()
Dim myDict As New Dictionary
'Добавляем три пары ключ-элемент
myDict.Add "№1", "Ананас"
myDict.Add 2, "Апельсин"
myDict.Add "Три", "Мандарин"
'Смотрим количество записей в словаре
MsgBox myDict.Count
'Извлекаем элементы по ключам
MsgBox myDict.Item("№1")
MsgBox myDict.Item(2)
MsgBox myDict.Item("Три")
End Sub

Пример 2
Замена элемента в существующей паре ключ-элемент, добавление новой пары ключ-элемент и добавление нового ключа без указания элемента с помощью свойства Item:

Sub Primer2()
Dim myDict As New Dictionary, _
i As Integer
'Добавляем три пары ключ-элемент
myDict.Add 1, "Январь"
myDict.Add 2, "Вторник"
myDict.Add 3, "Среда"
'Меняем элемент в паре с ключом 1
myDict.Item(1) = "Понедельник"
'Добавляем новую пару ключ-элемент
myDict.Item(4) = "Четверг"
'Извлекаем элементы по ключам
For i = 1 To 4
  MsgBox myDict.Item(i)
Next
'Добавляем новый ключ без элемента,
'MsgBox покажет пустую строку
MsgBox myDict.Item(5)
'Убеждаемся, что теперь в словаре
'не 4, а 5 записей
MsgBox myDict.Count
End Sub

Обратите внимание, добавить новый ключ без указания элемента можно только путем присвоения значения выражения переменной или, как во втором примере, функции MsgBox:

'Так работает:
a = myDict.Item(Новый_Ключ)
'Так работает:
MsgBox myDict.Item(Новый_Ключ)
'Так не работает, вызывает ошибку:
myDict.Item(Новый_Ключ)

Пример 3
Извлечение ключей и элементов в массив:

Sub Primer3()
Dim myDict As New Dictionary, _
a As Variant, b As String, _
i As Integer
myDict.Add "з", "Зима"
myDict.Add "в", "Весна"
myDict.Add "л", "Лето"
myDict.Add "о", "Осень"
'Извлекаем ключи в массив a
a = myDict.Keys
'Записываем извлеченные ключи
'в переменную b
b = "Ключи:" & vbNewLine
  For i = 1 To myDict.Count
    b = b & vbNewLine & a(i - 1)
  Next
'Смотрим список ключей
MsgBox b
'Извлекаем элементы в массив a
a = myDict.Items
'Записываем извлеченные
'элементы в переменную b
b = "Элементы:" & vbNewLine
  For i = 1 To myDict.Count
    b = b & vbNewLine & a(i - 1)
  Next
'Смотрим список элементов
MsgBox b
End Sub
Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

VBA Excel. Объект Dictionary (свойства, методы, примеры): 2 комментария

  1. Фарин

    Отличная статья.
    Евгений, а словари могут быть вложенными? например, значением может являться другая структура данных, например, другой словарь или коллекция?

    1. Евгений (автор статьи)

      Привет, Фарин!
      Словарь поддерживает любые типы данных. Причем не только в значениях, но и в ключах. Есть одно исключение: ключи не могут быть массивами. Пример с вложенным словарем:

      Sub Primer()
      Dim myDict1, myDict2, a1, a2
        Set myDict1 = CreateObject("Scripting.Dictionary")
        Set myDict2 = CreateObject("Scripting.Dictionary")
          myDict1.Add 1, "Один"
          myDict1.Add 2, "Два"
          myDict1.Add 3, "Три"
            myDict2.Add "Словарь", myDict1
        Set a1 = myDict2.Item("Словарь")
        a2 = a1.Item(2)
      MsgBox a2
      End Sub
      

Добавить комментарий

Ваш комментарий будет опубликован после прохождения обязательной модерации. Исходящие ссылки не допускаются. Время модерации составит от нескольких минут до нескольких часов в зависимости от времени суток и занятости модератора. При добавлении в комментарий кода VBA Excel, вставьте перед его началом тег [vb] и по окончании кода - [/vb].