Использование объекта словаря в Excel VBA - PullRequest
5 голосов
/ 26 июля 2011

Я изо всех сил пытаюсь заставить мой объект Dictionary работать, чтобы вернуть экономические данные выбранного Ссылочного номера.

например, у меня есть ссылки ниже и соответствующие значения, однако, я не уверен, смогу ли я достичь этого, используя объект Dictionary, и альтернативное предложение будет высоко оценено.

Ref No  Amount Price   Year
IB1232  1000   1.23    2011
IB1231  1000   3.23    2011
IB1233  1000   3.43    2011
IB1234  1000   3.43    2011

Я думал, что смог бы достичь, сформировав Ключ и Значение для справки и соответствующие детали, но не смог достичь ..

Ответы [ 3 ]

15 голосов
/ 27 июля 2011

@ das_weezul

В библиотеке сценариев есть объект Dictionary в VBA (для его использования необходимо добавить эту ссылку).Словарь имеет некоторые дополнительные функции, такие как возможность проверить, существует ли ключ, прежде чем пытаться получить к нему доступ.

@ Sky Cobb

Да, вы можете выполнять все перечисленные выше задачи с помощью словаря.Синтаксис будет таким же, за исключением того, что вы должны предоставить ключ для каждого элемента, который вы добавляете в него.

13 голосов
/ 26 июля 2011

Я не знаю, что вы называете Словарём в VBA, так как структура данных с указанной функциональностью в VBA называется Collection (но, возможно, вы написали свой собственный Ditionary, в таком случае нам нужен кодчтобы помочь вам).

Если я правильно понял ваш пример, вы хотите получить доступ, например, к {1000,1.23,2011} через ключ "IB1232".Вы можете легко сделать это, создав коллекцию коллекций следующим образом:

Dim coll as new Collection
Dim data as new Collection

data.Add 1000
data.Add 1.23
data.Add 2011

coll.Add data, "IB1232"

Для доступа к своим данным просто получите нужную запись (коллекцию) с помощью клавиши

Debug.Print coll.Item("IB1232")(1) 'Prints 1000
Debug.Print coll.Item("IB1232")(2) 'Prints 1.23
Debug.Print coll.Item("IB1232")(3) 'Prints 2010

. Вы также можетеиспользовать массив вариантов для данных

0 голосов
/ 07 марта 2019

Как упоминалось ранее, вам нужно включить ссылку, чтобы получить объект Dictionary, но он абсолютно существует.Добавить ссылку: Tools > References > [x] Microsoft Scripting Runtime

Public Sub test_dict()
    Dim td As Object
    Set td = New Dictionary

    td("IB1232") = "1000   1.23    2011"
    td("IB1233") = "1000   3.43    2011"

    'Another way to do it, may be around for legacy support
    td.Item("IB1234") = "1000   3.43    2011"

    'What you probably want... a key:value dictionary where the value is a collection
    Set td("IB1231") = New Collection
    td("IB1231").add 1000
    td("IB1231").add 3.23
    td("IB1231").add 2011


    'Get value by key
    Debug.Print td("IB1234")

    'Get a collection's value.... it's 1-indexed
    Debug.Print td("IB1231")(1)

    'Test if a key exists
    Debug.Print td.exists("IB12345")

    'See how many items there are
    Debug.Print td.Count()

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