|
16 / 4 / 0
Регистрация: 01.08.2011
Сообщений: 72
|
|
Организация циклической вставки данных15.01.2013, 14:12. Показов 7941. Ответов 69
Метки нет (Все метки)
Необходим макрос последовательного ввода данных в рабочую книгу из набора большого количества файлов, находящихся в 1 папке, например, с:\Baza и именуемые Файл1.xls, Файл2.xls и так далее. У всех у них один лист и называется одинаково "Лист1". Количество таких файлов конечно, но пока неизвестно. Необходимо последовательно в текущую открытую книгу на "Лист1" вставлять данные со столбца "А" по столбец "К" каждого из файлов последовательно, закрывая потом файл-источник. Возможно ли, чтобы макрос сам определял количество файлов-источников и формировал цикл? Процедура будет выполнятся многократно, поэтому нужен макрос. Процедуру обработки данных вставлю сам в нужное место.
Добавлено через 23 минуты Забыл уточнить. Реализовать надо без использования буфера обмена.
0
|
|
| 15.01.2013, 14:12 | |
|
Ответы с готовыми решениями:
69
Организация работы программ циклической структуры
|
|
16 / 4 / 0
Регистрация: 01.08.2011
Сообщений: 72
|
|
| 15.01.2013, 22:32 [ТС] | |
|
Вручную все работает нормально и быстро - меня устраивает, только надо автоматизировать повторяющиеся процедуры.
0
|
|
|
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,578
|
|||||||||||
| 15.01.2013, 22:55 | |||||||||||
|
Код делает следующее:
Кликните здесь для просмотра всего текста
Примечание Использование команды Copy для копирования сразу всех столбцов "A:K" оказалось быстрее (намного быстрее), чем использование такой конструкции:
1
|
|||||||||||
|
6082 / 1327 / 195
Регистрация: 12.12.2012
Сообщений: 1,023
|
||||||
| 16.01.2013, 00:48 | ||||||
|
Скрипт, ты написал отличный код, вот только он, как я понимаю, добавляет строки очередной книги не под строками, взятыми из предыдущей книги, а сбоку, на следующих 11 столбцах. И это логично - если в книге уже есть миллион строк, то следующий миллион уже не поместится. Но ТС наверняка хочет иметь только 11 столбцов, чтобы производить над ними операции сортировки, поиска дубликатов и т.д.
Поэтому предлагаю также альтернативное решение с использованием БД Access. И не надо бояться - БД не так уж и страшны...
С уважением, Aksima
2
|
||||||
|
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
|
||
| 16.01.2013, 01:13 | ||
|
0
|
||
|
16 / 4 / 0
Регистрация: 01.08.2011
Сообщений: 72
|
|
| 16.01.2013, 07:47 [ТС] | |
|
Казанский, Ваши 2 строчки абсолютно точно выражают то, что мне надо. Именно этот скрипт меня и интересует. Только обсчет происходит в другом месте - в рабочей книге, где уже заранее заведены формулы и виден итог. Поэтому нужно последовательное копирование, то есть перебор данных. И вставлять их надо в расчетный файл в то же место, где были предыдущие данные.
Добавлено через 1 час 17 минут Aksima, Правильно ли я понимаю, что в Вашем скрипте данные из файла-источника последовательно (построчно) наполняют рабочую книгу? с 1 по миллионную строку (если количество строк миллион)? с56 по 67 строка скрипта.
0
|
|
|
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,578
|
||||||||||||||||
| 16.01.2013, 08:28 | ||||||||||||||||
|
Aksima,
San8691, если данные нужно вставлять в одно и то же место на активном листе, то тогда такой код. Код не использует буфер обмена. Для работы кода нужно подключить библиотеку в VBA: Tools - References... - Windows Script Host Object Model. Кликните здесь для просмотра всего текста
San8691, если вы вставляемые данные обрабатываете с помощью формул или макросов, которые должны запускаться при каком-то событии (пример события - изменение данных на листе), то тогда нужно подумать о том, в какой части кода разместить это или может вообще удалить из кода это, если скорость работы кода останется прежней или не сильно будет отличаться:
1
|
||||||||||||||||
|
16 / 4 / 0
Регистрация: 01.08.2011
Сообщений: 72
|
|
| 16.01.2013, 09:05 [ТС] | |
|
Скрипт, Ну вот и готовое решение. Большое спасибо. Правильно ли я понимаю, что то место, где я могу вставить блок обработки данных в рабочей книге (включая макросы) можно расположить условно говоря в 49 строке...или в 51? где правильнее?
Добавлено через 8 минут По состоянию на 49 строку после закрытия файла-источника автоматически становится активной текущая книга или это не так? Добавлено через 6 минут Скрипт, Попробовал последний вариант скрипта. Все отлично работает, за исключением того, что первым открывается 2 файл, потом 3 и так далее. Последним открывается первый. Можно подправить? Добавлено через 15 минут Каков алгоритм перебирания файлов в папке-источнике данных? По названию? по размеру? может другой критерий? У меня 3 файла сейчас Файл1.xlsm Файл2.xlsm Файл3.xlsm первый самый большой. второй самый маленький. Похоже скрипт прогнал их по "весу" начиная с наименьшего.
0
|
|
|
9912 / 3933 / 743
Регистрация: 11.10.2011
Сообщений: 5,915
|
||||||
| 16.01.2013, 09:25 | ||||||
|
San8691, по какому принципу Вы определяете, какой файл первый, а какой последний?
У FSO на этот счёт может быть своё мнение (скорее всего по времени создания файла). Добавлено через 14 минут Вместо FSO здесь проще использовать Dir -
0
|
||||||
|
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,578
|
||||||
| 16.01.2013, 09:49 | ||||||
|
Код без использования библиотеки "Windows Script Host Object Model".
Код с использованием команды Dir. San8691, обработку файла добавьте в код ниже, в пункт 6. Кликните здесь для просмотра всего текста
Примечание Активная книга, куда копируются данные, должна быть сохранена. Если активная книга новая книга, то Excel закрывает её при открытии обрабатываемого файла и из-за этого происходит ошибка.
1
|
||||||
|
9912 / 3933 / 743
Регистрация: 11.10.2011
Сообщений: 5,915
|
||
| 16.01.2013, 10:00 | ||
|
Скорее всего принцип будет тот же (по дате создания). Да и алфавитный порядок для ТС тоже не подойдёт, т.к. Файл10 получим раньше, чем Файл2. Перебирать файлы придется по счетчику
0
|
||
|
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,578
|
|
| 16.01.2013, 10:03 | |
|
Апострофф, я имел ввиду алфавитный порядок, который используется в сортировках, например, в Excel, в Windows.
Если код из сообщения #29 тоже будет брать файлы не в алфавитом порядке, то тогда нужно брать имена всех файлов, сортировать эти имена и уже обрабатывать файлы на основе этой сортировки.
0
|
|
|
9912 / 3933 / 743
Регистрация: 11.10.2011
Сообщений: 5,915
|
|
| 16.01.2013, 10:13 | |
|
Скрипт, ещё раз повторю - ТС хочет не алфавитный порядок, а по номерам файлов, т.е. "Файл10" > "Файл2". Алфавитная сортировка имен этого не обеспечивает!
1
|
|
|
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,578
|
|
| 16.01.2013, 10:17 | |
|
Апострофф, а какие есть ещё виды сортировок кроме Алфавитной. Я не программист и терминологию сортировок не знаю. Программа Excel как сортирует - как эта сортировка называется?
0
|
|
|
16 / 4 / 0
Регистрация: 01.08.2011
Сообщений: 72
|
|
| 16.01.2013, 10:44 [ТС] | |
|
Скрипт, и это все тоже работает, но перебор файлов происходит также - то есть скорее всего по дате создания, что меня вполне устроит. Это даже удобнее, поскольку могу обзывать их так, как мне удобнее. Дело за малым - впихнуть в этот скрипт метод обращения к файлу-источнику за данными, не открывая его, в целях экономии времени, если этот метод действительно даст такую экономию. Но, думаю, это будет отдельная тема.
Добавлено через 2 минуты Господа, не спорьте. Меня вполне устроит выбор по дате создания файла, поскольку все равно предстоит работа по их переименованию и увеличению количества (так как сейчас в каждом по 3-4 листа). Добавлено через 12 минут Сейчас проверил на разных файлах разные комбинации. Действительно перебирает по дате создания, начиная с более ранней, что является для меня оптимальным. Всем Спасибо!
1
|
|
|
6082 / 1327 / 195
Регистрация: 12.12.2012
Сообщений: 1,023
|
|||
| 16.01.2013, 11:02 | |||
С уважением, Aksima
0
|
|||
|
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,578
|
||
| 16.01.2013, 11:28 | ||
|
Пункт 1
В связи с тем, что есть разные способы сортировки и "Проводник" в Windows может сортировать, используя один способ, а код, написанный на VBA, может использовать другой способ сортировки, то остаётся только один вариант, чтобы наверняка обработать файлы в нужной последовтельности, - нужно указывать в коде конкретные имена книг, т.е. то, что предложено в сообщении #28: Организация циклической вставки данных Использовать всё остальное - это рисковано. Пункт 2
0
|
||
|
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
|
|||||||
| 16.01.2013, 11:29 | |||||||
![]() Ув. Aksima уже упомянул технологию БД - с ее помощью можно доставать данные из закрытых файлов Excel. Однако в Excel уже есть встроенный механизм доступа к данным из закрытых файлов! И он работает даже без VBA - это формулы! Откройте пустой лист рабочей книги (с макросами) и выполните макрос
Более того. Многие формулы Excel работают с закрытыми книгами. Так что, может быть, и специальный лист для загрузки данных из других файлов не нужен. Просто подставляйте новый путь файла в формулы на расчетном листе с помощью Cells.Replace и сразу получайте результат. Правда, способ с доп. листом может оказаться эффективнее, потому что в этом случае обращение к закрытому файлу производится один раз, а в случае подстановки имени файла в расчетные формулы - много раз.
1
|
|||||||
|
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,578
|
|
| 16.01.2013, 11:36 | |
|
По поводу взятия книг в нужной последовательности.
Можно ещё попробовать обращаться прямо к проводнику Windows и брать из него книги в той последовательности, как книги там находятся.
0
|
|
|
16 / 4 / 0
Регистрация: 01.08.2011
Сообщений: 72
|
|
| 16.01.2013, 12:30 [ТС] | |
|
Казанский, Так, это уже намного интереснее. Как в таком случаем мне организовать последовательные перебор путей следования? Тупо все их прописать один за одним или есть более совершенные методы? Поскольку данные подразумевают наращивание со временем.Условно примем, что все фалйлы-источники идентичны в плане организации, имеют по 1 листу, данные не превышают определенный диапазон (столбцы). Различаются только названиями.
Cells.Replace - этого зверя можно загнать в цикл в плане прохода по файлам в определенной папке? Добавлено через 26 минут Казанский, В сообщении #29 есть скрипт. Там файлы последовательно перебираются. Так может быть строки с 31 по 39 заменить записью обращения к текущему файлу (поскольку мы уже на нем, то есть путь до него пройден, но он еще не открыт) с выборкой нужного диапазона? Логично? Как тогда будет выглядеть синтаксис? Тогда, возможно и путь писать не надо... Добавлено через 7 минут Думаю, проще организовать перебор путей следования в цикле - всего несколько строк получится - думаю - это самое простое и быстрое решение.
0
|
|
|
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,578
|
||||||
| 16.01.2013, 12:54 | ||||||
|
Вот такой вариант того, что предложено в сообщении #37 (без использования Replace):
Организация циклической вставки данных Кликните здесь для просмотра всего текста
1
|
||||||
| 16.01.2013, 12:54 | |
|
ОРГАНИЗАЦИЯ РАБОТЫ ПРОГРАММ ЦИКЛИЧЕСКОЙ СТРУКТУРЫ
Макрос сбора и вставки данных Универсальная функция вставки данных в БД Ошибка вставки данных в бд access Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|