Всем добрый день. Помогите, пожалуйста, разобраться. Есть макрос, который ищет связанные детали по их идентификатору (1 столбец) через идентификатор соединения (2 столбец). На начальном этапе создается словарь, где ключ это идентификатор соединения (2 столбец), а значение строка с идентификаторами деталей, которые имеют это соединение. В качестве значений пробовал использовать массивы, но с ними вообще провал (упираюсь в память). Далее через двойной цикл по этому словарю происходит поиск всех деталей, которые связаны между собой. В словаре 4000 записей. Максимальное кол-во итераций чуть меньше 4000*4000, но за 3 часа на более менее шустрой машине макрос не завершает работу. Пример файла прилагаю. Буду признателен за конструктивную помощь.
Всем добрый день. Помогите, пожалуйста, разобраться. Есть макрос, который ищет связанные детали по их идентификатору (1 столбец) через идентификатор соединения (2 столбец). На начальном этапе создается словарь, где ключ это идентификатор соединения (2 столбец), а значение строка с идентификаторами деталей, которые имеют это соединение. В качестве значений пробовал использовать массивы, но с ними вообще провал (упираюсь в память). Далее через двойной цикл по этому словарю происходит поиск всех деталей, которые связаны между собой. В словаре 4000 записей. Максимальное кол-во итераций чуть меньше 4000*4000, но за 3 часа на более менее шустрой машине макрос не завершает работу. Пример файла прилагаю. Буду признателен за конструктивную помощь.Unforcer
Здравствуйте. Настоятельно рекомендую в словарь писать не ячейки целиком, а .Value. И второе: этот оператор GoTo next_loop зацикливает макрос. Объясните словами на одном примере, что надо сделать
Здравствуйте. Настоятельно рекомендую в словарь писать не ячейки целиком, а .Value. И второе: этот оператор GoTo next_loop зацикливает макрос. Объясните словами на одном примере, что надо сделатьPelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816
Pelena, смысл макроса в следующем: допустим две детали А и Б имеют общий идентификатор соединения - это значит что они соединены между собой с одной стороны. С другой стороны есть идентификатор соединения, которые показывает что деталь А соединена с деталью В. В свою очередь деталь В соединена с деталью Г. Результатом работы макроса должен быть словарь, где его значения полноценная цепочка деталей, в случае примера, который я привел - А;Б;В;Г. Таких деталей в таблице тысячи и нужно найти соединенные между собой. Оператор GoTo next_loop зацикливает макрос только тогда, когда была обнаружена связка. Как только связок больше не будет обнаружено flag= False не позволит зациклить макрос.
Pelena, смысл макроса в следующем: допустим две детали А и Б имеют общий идентификатор соединения - это значит что они соединены между собой с одной стороны. С другой стороны есть идентификатор соединения, которые показывает что деталь А соединена с деталью В. В свою очередь деталь В соединена с деталью Г. Результатом работы макроса должен быть словарь, где его значения полноценная цепочка деталей, в случае примера, который я привел - А;Б;В;Г. Таких деталей в таблице тысячи и нужно найти соединенные между собой. Оператор GoTo next_loop зацикливает макрос только тогда, когда была обнаружена связка. Как только связок больше не будет обнаружено flag= False не позволит зациклить макрос.Unforcer
это откуда видно. Смотрим, чтобы были одинаковые последние части после - (71B824614504)? На другие не смотрим?
Ну смотрите, у первой пары деталей общий идентификатор соединения {00013887-0000-0000-8204-71B824614504}. Используем этот идентификатор как ключ для создания первой пары деталей (в примере выделено желтым). И так создаем на первом этапе словарь с соединенными деталями. А далее начинаем искать циклом в цикле совпадения по идентификаторам деталей - если какая-то деталь уже была в каком-то соединении, то всю связку добавляем к той связке где деталь присутствовала, удаляем из словаря связку которую скопировали, чтобы больше ее не проверять.
это откуда видно. Смотрим, чтобы были одинаковые последние части после - (71B824614504)? На другие не смотрим?
Ну смотрите, у первой пары деталей общий идентификатор соединения {00013887-0000-0000-8204-71B824614504}. Используем этот идентификатор как ключ для создания первой пары деталей (в примере выделено желтым). И так создаем на первом этапе словарь с соединенными деталями. А далее начинаем искать циклом в цикле совпадения по идентификаторам деталей - если какая-то деталь уже была в каком-то соединении, то всю связку добавляем к той связке где деталь присутствовала, удаляем из словаря связку которую скопировали, чтобы больше ее не проверять.Unforcer