Есть ли в VBA структура словаря? Как массив ключей <>?
vba
dictionary
data-structures
vb6
UuDdLrLrSs
источник
источник
keyed
.Dim dict As New Scripting.Dictionary
без ссылки. Без ссылки вы должны будете использовать метод поздней привязкиCreateObject
для создания экземпляра этого объекта.VBA имеет объект коллекции:
В
Collection
объекте выполняет на основе ключей поисков с использованием хэша так быстро.Вы можете использовать
Contains()
функцию, чтобы проверить, содержит ли определенная коллекция ключ:Изменить 24 июня 2015 года : короче
Contains()
благодаря @TWiStErRob.Редактировать 25 сентября 2015 : добавлено
Err.Clear()
благодаря @scipilot.источник
Contains
:On Error Resume Next
_col(key)
_Contains = (Err.Number = 0)
ContainsKey
; кто-то, читающий только вызов, может спутать его с проверкой того, что он содержит определенное значение.VBA не имеет внутренней реализации словаря, но из VBA вы все еще можете использовать объект словаря из MS Scripting Runtime Library.
источник
Дополнительный пример словаря, который полезен для сдерживания частоты встречаемости.
Вне цикла:
Внутри цикла:
Чтобы проверить частоту:
источник
Основываясь на ответе cjrh , мы можем создать функцию Contains, не требующую меток (я не люблю использовать метки).
Для моего проекта я написал набор вспомогательных функций, чтобы
Collection
поведение стало более похожим на aDictionary
. Это все еще позволяет рекурсивные коллекции. Вы заметите, что Key всегда стоит первым, потому что он был обязательным и имел больше смысла в моей реализации. Я также использовал толькоString
ключи. Вы можете изменить его обратно, если хотите.Устанавливать
Я переименовал это, чтобы установить, потому что это перезапишет старые значения.
Получить
Материал
err
предназначен для объектов, так как вы передаете объекты с использованиемset
и без переменных. Я думаю, что вы можете просто проверить, если это объект, но я был вынужден на время.имеет
Причина этого поста ...
удалять
Не бросает, если его не существует. Просто убедитесь, что он удален.
Ключи
Получить массив ключей.
источник
Кажется, что в скриптовом словаре времени выполнения есть ошибка, которая может испортить ваш дизайн на продвинутых этапах.
источник
Да. Для VB6 , VBA (Excel) и VB.NET
источник
Если по какой-либо причине вы не можете установить дополнительные функции в Excel или не хотите, вы также можете использовать массивы, по крайней мере, для простых задач. В качестве WhatIsCapital вы вводите название страны, а функция возвращает вам ее капитал.
источник
Dim
ключевом словеCountry
иCapital
должна быть объявлена как Варианты из-за использованияArray()
,i
должна быть объявлена (и должна быть, еслиOption Explicit
она установлена), и счетчик цикла будет выбрасывать ошибку выхода за границы - безопаснее использоватьUBound(Country)
дляTo
значения. Также, возможно, стоит отметить, что хотяArray()
функция является полезным сочетанием клавиш, это не стандартный способ объявления массивов в VBA.Все остальные уже упоминали об использовании версии scripting.runtime класса Dictionary. Если вы не можете использовать эту DLL, вы также можете использовать эту версию, просто добавьте ее в свой код.
https://github.com/VBA-tools/VBA-Dictionary/blob/master/Dictionary.cls
Это идентично версии Microsoft.
источник