Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.01.2017, 09:21   #1
amadeus017
Форумчанин
 
Регистрация: 28.05.2014
Сообщений: 158
По умолчанию Копирование строк макросом при условии

Доброго времени суток, уважаемые форумчане!

Есть два файла, первый называется "ИНН", второй "Учет по контрагентам" в котором тысячи строк. В настоящее время, я в файле "ИНН", создаю новый лист (Лист1), из файла "Учет по контрагентам" копирую 4-ю строку (шапку таблицы), затем из файла "ИНН" с листа "ОТКРЫТЫЕ" из графы "С" (ИНН), копирую значение ИНН, перехожу в файл "Учет по контрагентам" и в графе "С" (ИНН) ищу все строки, где найдется значение, копирую строки (ячейки A:S) и вставляю их на "Лист1" файла "ИНН", после чего на "Лист1" по данному значению ИНН из листа "ОТКРЫТЫЕ" в графу " Т ", вставляю КОД (значение графы "А").
Пробовал это делать ставя фильтр в файле "Учет по контрагентам" по графе "С" (ИНН), зависает Excel, так как очень много строк в файле. По этому обращаюсь к вам за помощью, можно ли эту процедуру, делать макросом?
Вложения
Тип файла: xlsx ИНН.xlsx (24.0 Кб, 11 просмотров)
Тип файла: xlsx Учет по контрагентам.xlsx (11.7 Кб, 13 просмотров)
amadeus017 вне форума Ответить с цитированием
Старый 29.01.2017, 12:19   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Можно.
Думаю оптимально так -
1. сперва собрать словарь номеров ИНН из одноимённого файла (даже два - во втором к каждому сохранить его код).
2. циклом по данным контрагентов (быстрее по массиву, а не ячейкам) к каждому ИНН в словаре собрать коллекцию номеров нужных строк (т.е. ненужные ИНН не храним)
3. делаем лист с шапкой (ну или уже имеем заготовленный шаблон), куда перебором словаря и коллекций копируем в нужном порядке данные (все координаты уже есть).

P.S. Как вариант - код хранить в файле с заготовкой этого сборного листа (чтоб не изменять источники), в начале кода предложить пользователю указать мышью первый и второй файл с данными, в конце копию готового листа с результатом сохранить в файл или скопировать в первый файл, сам "инструмент" закрыть без сохранения изменений.
Хотя шапку в общем нет проблем скопировать из источника, если она будет непостоянной...
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 29.01.2017 в 12:30.
Hugo121 вне форума Ответить с цитированием
Старый 29.01.2017, 12:56   #3
amadeus017
Форумчанин
 
Регистрация: 28.05.2014
Сообщений: 158
По умолчанию

Ой... Пока читал, на голове что-то шевелилось... Кажется это волосы...
Примерно понял задумку, но писать макросы, умею только "макрорекордером", не думаю что с его помощью это возможно сделать.
amadeus017 вне форума Ответить с цитированием
Старый 29.01.2017, 13:01   #4
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

С его помощью - всё нет, а вот конкретно копирование можно записать.
Остальное всё есть тут на форуме - как использовать словарь (если работаете под виндой) и коллекции, изучайте, ещё много где пригодится.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 29.01.2017, 13:07   #5
amadeus017
Форумчанин
 
Регистрация: 28.05.2014
Сообщений: 158
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
P.S. Как вариант - код хранить в файле с заготовкой этого сборного листа (чтоб не изменять источники), в начале кода предложить пользователю указать мышью первый и второй файл с данными, в конце копию готового листа с результатом сохранить в файл или скопировать в первый файл, сам "инструмент" закрыть без сохранения изменений.
Хотя шапку в общем нет проблем скопировать из источника, если она будет непостоянной...
Вариант очень неплохой, как я понимаю. Т.е. есть два файла, один содержит ИНН и КОД (база с данными), а второй файл, это источник с данными из которого нужно получить данные, и все полученные данные, будут перенесены в файл который содержит в себе макрос. А больше всего понравилось, если я правильно понял, что файлы открываться не будут.
Если такое возможно сделать, то было бы КРУТО!!!
amadeus017 вне форума Ответить с цитированием
Старый 29.01.2017, 13:09   #6
amadeus017
Форумчанин
 
Регистрация: 28.05.2014
Сообщений: 158
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
С его помощью - всё нет, а вот конкретно копирование можно записать.
Остальное всё есть тут на форуме - как использовать словарь (если работаете под виндой) и коллекции, изучайте, ещё много где пригодится.
Хорошо, попробую что-нибудь сделать.
Спасибо!
Буду продолжать искать
amadeus017 вне форума Ответить с цитированием
Старый 29.01.2017, 13:14   #7
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Ну файлы открываться будут, но можно открывать их скрыто.
Вообще я подразумевал такой вариант - эти оба файла уже открыты, оба видны на экране одновременно (т.е. оба "неразвёрнуты" на весь экран), Вы открываете инструмент, сразу появляется просьба указать первый источник, затем второй, затем уже готов результат.
Если файлы не открыты - тогда можно предлагать выбирать/указывать их в дереве файлов, что может быть сложнее и на практике чревато ошибками, т.к. не видно что именно выбрали, на каких листах там нужные данные, плюс что тогда конкретно делать с результатом работы?
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 29.01.2017, 13:19   #8
amadeus017
Форумчанин
 
Регистрация: 28.05.2014
Сообщений: 158
По умолчанию

Ну да, если в закрытых файлах сложно будет выбрать исходный лист с данными, то можно и с открытыми книгами работать. Тогда в открытых книгах оба листа будут активными.
amadeus017 вне форума Ответить с цитированием
Старый 29.01.2017, 13:23   #9
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

В закрытых файлах листы не видны - т.е. тогда их номера/индексы или названия нужно точно знать заранее, если там всегда всё постоянно и генерится машиной - то нет проблем, а если с ними работают люди - то проблемы неизбежны
Когда файл открыт - Вы его видите, и в какой лист сами ткнёте мышью - за тот сами и отвечать будете.
И не важно как называется лист/книга, это в коде нигде не прописывается.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 29.01.2017, 14:42   #10
amadeus017
Форумчанин
 
Регистрация: 28.05.2014
Сообщений: 158
По умолчанию

Кто понял, как это воплотить можно? А то у меня с рекордером, да и в целом, ерунда какая-то получается...
amadeus017 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос копирование ячеек при условии жирного шрифта АннаСаратов1994 Microsoft Office Excel 25 20.12.2013 19:20
Удаление строк при условии vitaland Microsoft Office Excel 4 10.03.2012 11:22
Копирование данных из одной ячейки в другую при условии hrom_scorpio Microsoft Office Excel 4 06.08.2011 19:18
При условии перенос строк из одного листа в другой Ilya_L Microsoft Office Excel 5 19.06.2010 06:15
Копирование значения в другой столбец при определенном условии stasbz Microsoft Office Excel 1 01.07.2009 23:55