Страницы: 1
RSS
Ускорить макрос для переноса данных при совпадении кодов.
 
Доброе утро.

Есть большая база работников.Сравниваются колонка А на Лист2  с колонкой I на Лист1. И переносятся данные на Лист2.

Имеющийся макрос работает медленно на больших данных. Как можно ускорить этот процесс?
Изменено: Marat Ta - 02.03.2021 07:30:00
 
Цитата
Marat Ta написал:
Как можно ускорить
1. Отключить все что нужно отключить, Обновление экрана, события, пересчет, что скорее всего уже поможет
2. собирать данные в массив и выгружать сразу
3. поиск организовать через предварительно заполненный словарь или коллекцию.

по 1. с небольшими изменениями
Скрытый текст
Изменено: БМВ - 02.03.2021 07:55:31
По вопросам из тем форума, личку не читаю.
 
1. Отключал все... выигрыш во времени незначителен. Скорее всего дело в Find.... это тоже самое, что For.. next по большому диапазону по каждому поиску.
2. В Лист2 данные по группам с вакансиями, одним разом диапазон не выведешь, он будет сплошной.

Запутался с изменением своего примера на макрос из примера со словарем.
в теории загрузить в словарь с колонки I номер и номер строки. В Лист2 проверять по словарю и при совпадении номера вытащить из словаря номер строки и по ней подставить ячейки с Лист1.
Как добавить при добавлении номера в словарь еще и номер строки?


Есть возможность помочь переделать макрос для текущей задачи?.
Изменено: Marat Ta - 02.03.2021 13:02:14
 
Цитата
Marat Ta: Есть возможность помочь переделать макрос для текущей задачи?
проше заново написать, чем ТАКОЕ переделывать
если не помогут, то потом подключусь, а вообще подобная задача решалась много раз

UPD: Быстрый макрос вместо ВПР
Изменено: Jack Famous - 02.03.2021 10:16:33
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous,  я уже видел эту тему раньше в поиске. И другие такие же темы.

Все понятно, когда нужно "просто" сравнить 2 списка. Подсчитать, раскрасить, удалить с текущей позиции дубликат и т.п. Но пока не нашел копирование данных.

До меня не доходит следующее. Заносим в словарь Key - код для сравнения. А второй Item -это номер в массиве?
Мне нужно в словаре номер строки на листе1 у этого номера, чтобы я потом мог его как то вытащить и через него начать копировать нужные данные с этой строки на текущую.
Или, к примеру 2 словаря. В обоих номера и номера строк. По совпадению номера - перекидка данных по номерам строк с первого словаря в строки из 2 словаря.


Прошу не пинать за трудное освоение материала, ранее изучал VisualFoxpro. Там проще - связь через индексы.
Изменено: Marat Ta - 02.03.2021 12:18:44
 
Цитата
Marat Ta: я уже видел эту тему раньше в поиске. И другие такие же темы … Все понятно, когда нужно "просто" сравнить 2 списка … Мне нужно в словаре номер строки на листе1 у этого номера
значит вы не поняли, что получить порядковый номер "ключа" в массиве гораздо проще, чем что-то сразу с этими данными делать. И как раз это и делает мой макрос (не знаю, как вы там читали и что). Дополнил принцип работы по ссылке - изучайте, там ничего сложного
Изменено: Jack Famous - 02.03.2021 11:35:54
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Более просто: прошел по диапазону колонки I. 40000 строк, из них 400 пустые (пропустили).
Что будет в словаре, кроме номера(ключа)?
Там будет номер строки на листе2 (от 1 до 40000) в котором этот номер? Чтобы я по этому номеру строки вытащил еще данные 50 колонок на этой строке.
Или там будет номер позиции в словаре (40000-400=36600 порядковых номеров массива).
Изменено: Marat Ta - 02.03.2021 11:45:36
 
Цитата
Marat Ta: Что будет в словаре, кроме номера(ключа)?
Хорошо изучили, смотрю …
чё вас так носит-то?… Вы создали тему "как ускорить макрос", я вам дал супербыстрый макрос для поиска позиции ключей. Что ещё надо-то?…

Хотите разбираться в словарях - вот мануал
Хотите разобраться в моём макросе - там многое закомментировано, а объяснять вам что-то без знания словарей не имеет смысла
В любом случае — это не по теме
Изменено: Jack Famous - 02.03.2021 11:48:55
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Понял. Номер в массиве - это и есть номер строки.
Только если начало массива с A10, то в будущем надо прибавить к значению в словаре +9, чтобы выйти на реальный номер строки на листе.

Теперь буду проверять в файле примере.
Изменено: Marat Ta - 02.03.2021 12:04:58
 
Цитата
Marat Ta: Номер в массиве - это и есть номер строки
снова мимо
Если "где искать" - это диапазон "A3:A10" и ключ найден в "A5", то мой макрос (как и ПОИСКПОЗ) вернёт 3 (потому что это ТРЕТИЙ элемент, начиная с "A3"), а не 5, а вот если передать диапазон "A1:A10", то вернёт 5

Сделано так, потому что функция ИНДЕКС также работает по номеру из переданного диапазона/массива, а не строки
Изменено: Jack Famous - 02.03.2021 12:14:59
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Для меня как то сложно, с учетом, что поменял стартовый диапазон в новой форме и не доглядел, что в формулах нужно правильный сдвиг поменять... не +9, а +4...

А как можно изменить, чтобы в словаре был сразу "реальный" номер строки?

Суть использования массива для конкретной задачи, просто тупо перекопировать данные с найденной строки в Лист1 (в словаре) на текущую позицию.

Чтобы A5 - была всегда 5 строка, а не зависела от начала диапазона A1 или A3 (5 или 3)
Изменено: Marat Ta - 02.03.2021 12:34:27
 
Цитата
чтобы в словаре был сразу "реальный" номер строки?
Грузить в массив начиная с А1
 
Александр Моторин, не всегда получается. Заголовки есть в файлах. объединенные ячейки.
Удалять их из таблиц... работаю не сам.... мало ли чего поудаляют.  
Изменено: Marat Ta - 02.03.2021 17:41:00
 
Код из ссылки с диапазонами по файлу-примеру (добавлены проверки на пустоту)
Лист «отсюда»
Лист «сюда»
Если и так не поймёте, то я вообще не знаю, что делать (второй пример вообще ни о чём, а первый захламлён лишним - поправил)

Цитата
Александр Моторин: чтобы в словаре был сразу "реальный" номер строки … Грузить в массив начиная с А1
Цитата
Marat Ta: не всегда получается
это край. Вообще вилы  :D  :D  :D
Хочу вот так, но прям вот именно вот так не хочу
Изменено: Jack Famous - 02.03.2021 13:13:04
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Почему я не могу перенести из массива а в массив b значения?
а(ii,2) выдает ошибку вне диапазона.
Изменено: Marat Ta - 02.03.2021 17:15:10
 
Marat Ta, вы либо тролль, либо я ещё даже не придумал кто))
я вам дал полностью рабочий макрос, всё рассказал, показал, объяснил, а вы вернулись к своей начальной сборке???

Больше не вмешиваюсь  :D
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, у вас очень сложно и непонятно для меня.
И снова только подсчет. А где перенос данных?

Мне нужно просто перенести из строки в лист1 в строку в лист2 при совпадении номеров.
Изменено: Marat Ta - 02.03.2021 16:54:53
 
Цитата
Marat Ta: у вас очень сложно и непонятно для меня
я подробно всё закомментировал и дал ссылку на матчасть по словарям - если хотите быстро, то это простейший из методов
Цитата
Marat Ta: Мне нужно просто перенести из строки в лист1 в лист2 при совпадении номеров
а вот тут вы, мягко говоря, лукавите, т.к. вам нужно именно
Цитата
Marat Ta: Ускорить макрос для переноса данных при совпадении кодов
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, ускорить - при помощи словаря. Так как первый вариант через. Find.

Все уже, с вашей помощью, почти сделано. Осталось только перенос данных со строки на строку.
Изменено: Marat Ta - 02.03.2021 16:53:58
 
Цитата
Marat Ta написал:
а(ii,2) выдает ошибку вне диапазона.
У вас массив имеет размерность 1 to 30, 1 to 1.
То есть 30 строк один столбец.
Вы обращаетесь к массиву а(ii,2), ко второму столбцу которого нет.
 
TSN, спасибо.

Заменил на Cells(с номерами строк) и все как надо!

Jack Famous,  вам тоже спасибо за терпение и помощь.
Изменено: Marat Ta - 02.03.2021 17:39:39
 
Разобрался и с макросом с 14 сообщения. Работает быстрее всех.
Изменено: Marat Ta - 03.03.2021 10:55:40
Страницы: 1
Наверх