Дано: В одной папке лежит несколько xlsx файлов, в каждом из которых есть однотипные данные в столбцах A и B (к примеру ФИО и Город). Нужно написать макрос, который скопирует данные из всех этих ЗАКРЫТЫХ файлов и консолидирует в одной таблице в тех же столбцах A и B, с той лишь разницей что в столбце C будет указано название Книги из которой была взята каждая конкретная строка.
Во вложении архив, где для примера предложены 3 книги - источника данных и 1 книга "Консолидация", куда должны собраться все данные. В этой книге для примера показаны уже собранные данные.
Понимаю, что подобных задач выложено не мало, но собрать по кусочкам из готовых вариантов требуемое не хватает опыта.
Доброго дня, уважаемые.
Помогите справиться с задачей.
Дано: В одной папке лежит несколько xlsx файлов, в каждом из которых есть однотипные данные в столбцах A и B (к примеру ФИО и Город). Нужно написать макрос, который скопирует данные из всех этих ЗАКРЫТЫХ файлов и консолидирует в одной таблице в тех же столбцах A и B, с той лишь разницей что в столбце C будет указано название Книги из которой была взята каждая конкретная строка.
Во вложении архив, где для примера предложены 3 книги - источника данных и 1 книга "Консолидация", куда должны собраться все данные. В этой книге для примера показаны уже собранные данные.
Понимаю, что подобных задач выложено не мало, но собрать по кусочкам из готовых вариантов требуемое не хватает опыта.romkinss
Файл с названием "Файл1" содержит данные Русакова Оксана Геннадьевна Санкт-Петербург Ким Александра Николаевна Москва Агаркова Ирина Сергеевна Киров Гуляева Татьяна Владимировна Махачкала
Файл с названием "Файл2" содержит данные Юдина Анна Артуровна Липецк Мороховец Игорь Александрович Воронеж Михайлов Дмитрий Владимирович Слобода Сандрина Юлия Эдуардовна Смоленск
Файл с названием "Файл3" содержит данные Черванева Екатерина Вячеславовна Витебск Гладков Александр Вячеславович Балашиха Савченко Ирина Владимировна Ржев Данько Алексей Владимирович Белая Калитва
В файле Консолидация после отработки макроса должно быть Русакова Оксана Геннадьевна Санкт-Петербург Файл1 Ким Александра Николаевна Москва Файл1 Агаркова Ирина Сергеевна Киров Файл1 Гуляева Татьяна Владимировна Махачкала Файл1 Юдина Анна Артуровна Липецк Файл2 Мороховец Игорь Александрович Воронеж Файл2 Михайлов Дмитрий Владимирович Слобода Файл2 Сандрина Юлия Эдуардовна Смоленск Файл2 Черванева Екатерина Вячеславовна Витебск Файл3 Гладков Александр Вячеславович Балашиха Файл3 Савченко Ирина Владимировна Ржев Файл3 Данько Алексей Владимирович Белая Калитва Файл3
По сути могу и здесь расписать.
Файл с названием "Файл1" содержит данные Русакова Оксана Геннадьевна Санкт-Петербург Ким Александра Николаевна Москва Агаркова Ирина Сергеевна Киров Гуляева Татьяна Владимировна Махачкала
Файл с названием "Файл2" содержит данные Юдина Анна Артуровна Липецк Мороховец Игорь Александрович Воронеж Михайлов Дмитрий Владимирович Слобода Сандрина Юлия Эдуардовна Смоленск
Файл с названием "Файл3" содержит данные Черванева Екатерина Вячеславовна Витебск Гладков Александр Вячеславович Балашиха Савченко Ирина Владимировна Ржев Данько Алексей Владимирович Белая Калитва
В файле Консолидация после отработки макроса должно быть Русакова Оксана Геннадьевна Санкт-Петербург Файл1 Ким Александра Николаевна Москва Файл1 Агаркова Ирина Сергеевна Киров Файл1 Гуляева Татьяна Владимировна Махачкала Файл1 Юдина Анна Артуровна Липецк Файл2 Мороховец Игорь Александрович Воронеж Файл2 Михайлов Дмитрий Владимирович Слобода Файл2 Сандрина Юлия Эдуардовна Смоленск Файл2 Черванева Екатерина Вячеславовна Витебск Файл3 Гладков Александр Вячеславович Балашиха Файл3 Савченко Ирина Владимировна Ржев Файл3 Данько Алексей Владимирович Белая Калитва Файл3romkinss
Не знаю как с Mac, но для WIndows можно как-то так файл должен лежать в папке с базами
на листе QueryTable, в модуле листа код для обновления подключения для обновления ПКМ по таблице>обновить [vba]
Код
Private WithEvents qt As QueryTable Private Sub ss() Set qt = [Консолидация].ListObject.QueryTable qt.Connection = "OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Mode=Read;Extended Properties=text;Data Source=" & Me.path End Sub Private Sub Workbook_AfterSave(ByVal Success As Boolean) ss End Sub Private Sub Workbook_Open() ss End Sub Private Sub qt_BeforeRefresh(Cancel As Boolean) Dim Command$() Dim f$, s$, v& f = Me.path: s = Dir$(f & "\*.xls*") Do If Not s Like "~$*" And s <> Me.Name Then ReDim Preserve Command(v): Command$(v) = Application.Text$(s, _ """select *,'""@""' From [Лист1$] IN '" & _ f & "\""@""' [excel 12.0 xml;HDR=No]""") v = v + 1 End If s = Dir$() Loop While s <> "" qt.CommandText = Join(Command, " union all ") DoEvents End Sub
[/vba]
Не знаю как с Mac, но для WIndows можно как-то так файл должен лежать в папке с базами
на листе QueryTable, в модуле листа код для обновления подключения для обновления ПКМ по таблице>обновить [vba]
Код
Private WithEvents qt As QueryTable Private Sub ss() Set qt = [Консолидация].ListObject.QueryTable qt.Connection = "OLEDB;Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Mode=Read;Extended Properties=text;Data Source=" & Me.path End Sub Private Sub Workbook_AfterSave(ByVal Success As Boolean) ss End Sub Private Sub Workbook_Open() ss End Sub Private Sub qt_BeforeRefresh(Cancel As Boolean) Dim Command$() Dim f$, s$, v& f = Me.path: s = Dir$(f & "\*.xls*") Do If Not s Like "~$*" And s <> Me.Name Then ReDim Preserve Command(v): Command$(v) = Application.Text$(s, _ """select *,'""@""' From [Лист1$] IN '" & _ f & "\""@""' [excel 12.0 xml;HDR=No]""") v = v + 1 End If s = Dir$() Loop While s <> "" qt.CommandText = Join(Command, " union all ") DoEvents End Sub