Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Двумерный ассоциативный массив VBA, Придумать оптимальный способ обращения с таблицей данных по принципу двумерного ассоциативного массива.
 
Друзья, на VBA писать только начинаю, пока не разобрался, но голову ломаю несколько дней  :)  

Мне необходимо производить манипуляции с таблицей данных, где в строках некий набор записей, а в столбцах различные подзаписи (типа "продавец", "продукт", "цена"...), то есть налицо двумерный массив. Очень хочется обращаться с этим массивом, как с ассоциативным.
Примерно так
Код
a[1][key1] = "abc"
a[1][key2] = 2
....
a[N][keyM] = "smth"

Таким образом к элементам массива удобно обращаться по ключам, складывать, вычитать и тд.
Наверняка в VBA есть решение, но для меня оно не открывается.

Что я изучил:
Collection, scripting.dictionary - не подходит, поскольку на один ключ там только одно значение (если я всё правильно понял)
Пользовательский тип данных - не подходит, поскольку набор колонок может меняться от раза к разу (как задавать тип данных динамически, я не нашёл)

Что приходит на ум:
1. Создать двумерный массив (просто скопировать таблицу в массив) вместе с названиями столбцов. Таким образом в первой строке массива у меня будет массив с названиями полей. И когда мне нужно будет обратиться к элементу a[345876]["Продукт"], то я буду искать в первой строке порядковый номер элемента с названием "Продукт"
примерно так
Код
for i=1 to a[1].Count
if aa == "Продукт" then exit For
Next' a[345876][i]      ' будет искомым элементом двумерного массива

2. Создать коллекцию массивов и проделать примерно тоже самое. Чем это лучше или хуже не знаю, то мне кажется, это будет одно и тоже.
3. Создать отдельную коллекцию типа ColNames(value='номер элемента' key='имя колонки'). Тогда к элементу a[345876]["Продукт"] можно будет обратиться таким образом a[345876][ColNames.Item("Продукт"  ;)  ]

Но всё это, как мне кажется, кривые способы. Наверняка, есть красивое решение для такого рода задач.

Как вообще выглядит моя задача, точнее её часть:
1.У меня есть таблица, которую я копирую из другого файла. Строк в таблице десятки тысяч, столбцов - десятки (количество столбцов и их названия могут меняться от раза к разу)
Таблица примерно такого вида
Клиент продуктобъёмштукиСумма
k003382pr09878245-2094.4
k084982pr983769887-9837
k084982pr98346-34874.2-35
k084876pr983464576367736
2.Я формирую из комбинации значений нескольких столбцов столбец с ключом, который пока не является уникальным.
3. сортирую таблицу по пока не уникальному ключу
4. формирую массив уникальных ключей (убираю дубликаты)
5. далее нужно суммировать числовые столбцы по уникальному ключу. (это вполне решается прописыванием формул типа суммесли(...), но считает такой объем данных очень долго.
6. дальше нужно будет производить другие операции, но это уже другая история.

Возможно есть способ одновременного формирования списка уникальных ключей и суммирования строк с повторными ключами. Пока я формирую список ключей просто через .RemoveDuplicates

И так финальные вопросы:
1. Как создать такую структуру данных (массив, коллекцию... что угодно), чтобы можно было обращаться по принципу двухмерного ассоциативного массива.
2. Как удалить дубликаты в столбце "A" одновременным суммированием числовых значений в столбцах "D", "E"... там где значения столбца А повторяются.

Буду признателен за любые советы и конструктивную критику
Изменено: Alex - 07.01.2013 03:05:27
Страницы: 1
Наверх