Збір даних з файлів excel в заданій папці, макроси для excel

Цей макрос призначений для збору (завантаження) інформації з файлів Excel, розташованих в одній папці.

Для роботи цього макросу, крім нього самого, вам знадобиться додати в свій файл:

  1. функцію FilenamesCollection для отримання списку файлів в папці
  2. функцію GetFolder для виведення діалогового вікна вибору папки із запам'ятовуванням обраної папки
  3. прогрес-бар для відображення процесу обробки файлів (модуль класу і форму)

Якщо при тестуванні макросу у вас виникає помилка, що не знайдено та чи інша функція,
- перевірте, чи всі необхідні компоненти (які перераховані вище) ви додали до свого файл.

Цей макрос я публікую насамперед для себе (оскільки використовую цей код ледь не в кожній третій своїй програмі),
тому я не буду допомагати вам у налаштуванні цього макросу, якщо у вас він раптом не запрацює.

Макрос при запуску видає діалогове вікно для вибору папки, в якій розташовані оброблювані файли,
після чого відкриває кожен з файлів, зчитує з нього дані, поміщає їх в поточну книгу (з якої запущений макрос),
і закриває оброблений файл без збереження змін.

Після того, як черговий файл оброблений, він переміщається в другу папку ( «архів»).

Ігор, здрастуйте!
Хотів би уточнити питання.
У макросі зробив лише одну зміну - замість 10 стовпців вказав 40. Макрос все підтягнув і не 1 раз. Варто було закрити файл і заново спробувати підтягнути, макрос працює, показує, що все успішно, а в підсумку дані не підтягуються.
З чим це може бути пов'язано?

Сергій, що завгодно можна, якщо макрос переробити трохи.
Можу зробити під замовлення (за додаткову плату), - якщо влаштовує такий варіант, пишіть в скайп або на пошту.

Ігор, добрий день!
Відмінний макрос, але я зіткнувся з цікавою проблемою, чи можна дані вставляти не як вони взяті, а в рядок (у мене один стовпець конкретного діапазону в різних книгах)?

Немає там ніякого обмеження із запусків (код відкритий, можете самі переконатися)
Розширити стовпці ніщо вам не заважає, ніяких обмежень і захистів в прикріпленому файлі немає
Де що підправити - Не підкажете (техпідтримки за безкоштовними макросам немає)
Якщо самі не розберетеся, - можу зробити на замовлення (мінімальна вартість замовлення - 1500 руб)

Доброго дня. Я дивлюся у вас макрос розрахований на 3000 запусків а потім все? І другий момент, розшити стовпці більш J це вже платно? або де щось підправити я можу, я дивлюся ви все діапазонами обзивали в макросах збираються.

Проблемма зважилася самостійно, потрібно було всього лише перевідкрити файл для застосування змін формату.

Доброго часу доби, не могли б ви підказати, чому при колекціонуванні більш, ніж 64000 рядків макрос перестає вставляти дані?
книга була збережена в формат .xlsb
помилка наступна:
для
shd.Range ( "a" shd.Rows.Count) .End (xlUp) .Offset (1) .Resize (ra.Rows.Count, ra.Columns.Count) .Value
видає повідомлення: "Application-defined or object-defined error"

Оформляйте замовлення на сайті, - зробимо.

Доброго дня. Ось така є у мене завдання, в Excel я чайник. Допоможіть вирішити її. Суть в наступному. Є деяка кількість файлів Excel в папці, щодня різне (від 100 до кількох тисяч), потрібен висновок назви кожного файлу в загальну таблиця, рядок назви файлу в графі з підрахунком рядків в кожному фалі, виключаючи шапку, загальні число файлов.І бажано інтеграція в word. Як прикріпити таблиці для прикладу?

намалював в коді ось так:

'If (sh.Range ( "c45") = 1) Then
'Shd.Range ( "f" shd.Rows.Count) .End (xlUp) .Offset (1) .Resize (1, 1) .Value = Array (sh.Range ( "e45"))
'End If' Напрямки використання - на відрядження

'If (sh.Range ( "c47") = 1) Then
'Shd.Range ( "f" shd.Rows.Count) .End (xlUp) .Offset (1) .Resize (1, 1) .Value = Array (sh.Range ( "e47"))
'End If' Напрямки використання - госпвитрати

'If (sh.Range ( "c49") = 1) Then
'Shd.Range ( "f" shd.Rows.Count) .End (xlUp) .Offset (1) .Resize (1, 1) .Value = Array (sh.Range ( "e49"))
'End If' Напрямки використання - внесення коштів

'If (sh.Range ( "c51") = 1) Then
'Shd.Range ( "f" shd.Rows.Count) .End (xlUp) .Offset (1) .Resize (1, 1) .Value = Array (sh.Range ( "e51"))
'End If' Напрямки використання - Інша

Все відмінно працює і в підсумкову таблицю записується значення з відповідного стовпця "e" якщо в стовпці "з" тільки одне входження "1". В іншому випадку якщо "1" кілька то в таблицю додаються додаткові рядки. Можна як то поправити, що б при декількох входженнях "1" в стовпці "c" в підсумкову таблицю записувалися дані відповідного рядка з шпальти "e" в одну клітинку через роздільник.

Добрий день.
Спасибі за відмінний макрос, то що мені потрібно, тільки треба поправити пару рядків.
Set ra = sh.Range (sh.Range ( "n2330"), sh.Range ( "n" sh.Rows.Count) .End (xlUp)). Resize (, 1)

shd.Range ( "a" shd.Rows.Count) .End (xlUp) .Offset (1) .Resize (ra.Rows.Count, ra.Columns.Count) .Value = ra.Value

Мені потрібен не масив даних, а вставка 4-5 конкретних осередків в один рядок, чи не підкажете як змінити ці рядки?
Дякуємо

У статті не весь код написаний.
У доданому файлі до статті, - файл з усіма необхідними макросами.
Відкрийте цей файл, - і скопіюйте звідти весь код (+ модуль класу і форму прогрес-бару)

Привіт, Рафаель.
Так звичайно можна.
Оформляйте замовлення на сайті, прикріплюйте приклади файлів, і докладно описувати, що і як має працювати.

здрастуйте а можна у вас зробити замовлення на макрос. вивести 2 діалогових вікна щоб там можна було міняти параметри наприме брати з 1 або 2 листа. і з якою осередку брати дані