Здравствуйте, уважаемые специалисты. Решение данной проблемы, скорей всего, не должно проводиться с использованием VBA - вероятно, лучше Python или другие языки. Но я, хоть как-то, могу работать только с VBA. Я попытаюсь объяснить суть проблемы. Если кто-нибудь сможет подсказать, в каком направлении думать, буду очень благодарен. Моих знаний, к сожалению, не хватает.
Убедительно прошу сильно не ругаться. Объясняю, как могу. Буду благодарен за любые идеи.
Задача. Есть 2 двумерных массива
по 2 млн. "строк" и 4 "столбца". В массиве 1 содержатся клиенты, для которых нужно найти план, содержащийся в массиве 2. Модель в приложенном файле.
Каждый клиент уникален и повторяется к каждом массиве только 1 раз.
Таким образом, чтобы подтянуть план из 2-ого массива в 1-ый в Excel можно было бы использовать, например, ВПР. Реализация подобного в VBA возможна с помощью циклов
"For i". Но
программа работает очень долго, так как очень большое кол-во данных. Также можно усложнить и реализовать перебор массивов через
For each, но, всё-равно, долго.Единственный выход, который я вижу, это искать совпадения не во всём массиве 2, а в кусочке данных, относящихся к конкретному субрегиону. Вот, как это реализовать?
Я пытался вкладывать словари в словари по типу (это бы решило проблему):
dicSubregion.Add Key:= "Название уникального субрегиона", Item:= dicClientsOfTheSubregion(Клиенты, относящиеся к данному субрегиону)
dicClientsOfTheSubregion.Add Key:= "Название уникального клиента", Item:= "Номер строки в массиве"
К сожалению, вложенный словарь dicClientsOfTheSubregion содержит не только клиентов, относящиеся к конкретному субрегиону, а содержит вообще всех клиентов.
Основное препятствие реализации данного метода отражено в коде ниже.
Код |
---|
dicDicReg.Item("Проверка") = "Результат положительный" 'Заполняем словарь для вкладывания.
Set dicDic.Item("Словарь") = dicDicReg 'Вкладываем словарь с новым ключом.
'К сожалению, если очистить словарь dicDicReg, то он очистится и, будучи вложенным, в словаре dicDic.
dicDicReg.RemoveAll
'Выдаст ошибку.
a = dicDic.Item("Словарь").Item("Проверка")
'Можно ли как-то сделать так, чтобы словарь dicDicReg, будучи вложенным в dicDic, не менялся??? Это бы решило мою проблему.
|