Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Ассоциативные массивы
Ассоциативный массив (или словарь) — это набор элементов, доступ к которым осуществляется не по индексу (как это было в обычном массиве), а по ключу. В качестве ключа можно указать число или строку. Элементы словаря могут содержать данные произвольного типа. Чтобы получить элемент, необходимо указать ключ, который использовался при сохранении значения.
В языке VBA нет встроенной поддержки ассоциативных массивов, однако можно получить доступ к ним через объект Scripting.Dictionary
. Создать объект позволяет следующий код:
Dim Dict As Variant
Set Dict = CreateObject("Scripting.Dictionary")
Объект Scripting.Dictionary
поддерживает следующие методы:
Add()
— добавляет новый элемент по ключу. В качестве ключа можно использовать число или строку. Если элемент с указанным ключом уже существует, то возникнет ошибка и программа будет остановлена. Формат метода:
Add <Ключ>, <Значение>
Пример:
Dim Dict As Variant
Set Dict = CreateObject("Scripting.Dictionary")
Dict.Add "a", 1
Dict.Add "b", 2
Item(<Ключ>)
— возвращает элемент по указанному ключу. Можно как получить значение по ключу, так и присвоить значение. Если элемент с указанным ключом отсутствует, то он будет добавлен. Пример:
Dim Dict As Variant
Set Dict = CreateObject("Scripting.Dictionary")
Dict.Add "a", 1
Dict.Add "b", 2
Dict.Item("b") = 3
Debug.Print Dict.Item("b") ' 3
Dict.Item("c") = 4
Debug.Print Dict.Item("c") ' 4
Exists(<Ключ>)
— возвращает значениеTrue
, если элемент с указанным ключом существует, иFalse
— в противном случае;Remove(<Ключ>)
— удаляет элемент с указанным ключом. Если ключ не существует, то возникнет ошибка и программа будет остановлена. Пример:
Dim Dict As Variant
Set Dict = CreateObject("Scripting.Dictionary")
Dict.Add "a", 1
Dict.Add "b", 2
Debug.Print Dict.Exists("b") ' True
Dict.Remove ("b") ' Удаляем элемент
Debug.Print Dict.Exists("b") ' False
RemoveAll()
— удаляет все элементы:
Dim Dict As Variant
Set Dict = CreateObject("Scripting.Dictionary")
Dict.Add "a", 1
Dict.Add "b", 2
Debug.Print Dict.Exists("b") ' True
Dict.RemoveAll ' Удаляем все элементы
Debug.Print Dict.Exists("b") ' False
Keys()
— возвращает массив со всеми ключами;Items()
— возвращает массив со всеми значениями. Пример:
Dim Dict As Variant, Item As Variant
Set Dict = CreateObject("Scripting.Dictionary")
Dict.Add "a", 1
Dict.Add "b", 2
For Each Item In Dict.Keys() ' Все ключи
Debug.Print Item ' Ключ
Debug.Print Dict.Item(Item) ' Значение
Next
For Each Item In Dict.Items() ' Все значения
Debug.Print Item
Next
Key()
— позволяет изменить название ключа. Имеет следующий формат:
Key(<Ключ>) = <Новый ключ>
Пример:
Dim Dict As Variant, Item As Variant
Set Dict = CreateObject("Scripting.Dictionary")
Dict.Add "a", 1
Dict.Key("a") = "b"
Debug.Print Dict.Item("b") ' 1
Объект Scripting.Dictionary
содержит следующие свойства:
Count
— количество элементов:
Dim Dict As Variant
Set Dict = CreateObject("Scripting.Dictionary")
Dict.Add "a", 1
Dict.Add "b", 2
Dict.Add "c", 3
Debug.Print Dict.Count ' 3
CompareMode
— задает режим сравнения ключей. Обратите внимание на то, что установка нового значения возможна только для пустого объекта. Можно указать следующие значения:
vbBinaryCompare
—0
— двоичное сравнение (значение по умолчанию). Сравнение зависит от регистра символов;vbTextCompare
—1
— текстовое сравнение. Регистр символов при сравнении не учитывается.
Пример использования текстового сравнения:
Dim Dict As Variant
Set Dict = CreateObject("Scripting.Dictionary")
Dict.CompareMode = vbTextCompare
Dict.Add "a", 1
Debug.Print Dict.Item("A") ' 1
Перебрать все элементы ассоциативного массива можно с помощью цикла For Each...Next
. В качестве примера выведем элементы словаря двумя способами. Первый способ использует метод Key()
, возвращающий массив с ключами ассоциативного массива. Во втором случае мы просто указываем ассоциативный массив в качестве параметра. На каждой итерации цикла будет возвращаться ключ, с помощью которого внутри цикла можно получить значение, соответствующее этому ключу (листинг 2.7).
Листинг 2.7. Перебор элементов ассоциативного массива
Dim Dict As Variant, Item As Variant
Set Dict = CreateObject("Scripting.Dictionary")
Dict.Add "a", 1
Dict.Add "b", 2
' Способ 1
For Each Item In Dict.Keys() ' Все ключи
Debug.Print Item ' Ключ
Debug.Print Dict.Item(Item) ' Значение
Next
' Способ 2
For Each Item In Dict ' Все ключи
Debug.Print Item ' Ключ
Debug.Print Dict.Item(Item) ' Значение
Next
Помощь сайту
Yandex-деньги: 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов