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

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, вставьте перед его началом тег [vb] и по окончании кода - [/vb].