Добрый день! Появилась необходимость работать с данными посредствам VBA. Если Иксель в какой-то мере стал понятным и местами даже родным, то написание кода – пока нет. Есть задача, которая требует ежемесячного обновления одного файла данными из пяти других. Спешу заверить, что форумы я читал, статьи читал, код посложнее чем Hello world осилил, НО сложность и оперативность вышеозначенной задачки вынуждает меня просить о помощи… Поэтому, я обращаюсь, чтобы получить готовый макрос и уже на его основе изучить как это и что это… Итак, есть 2 типа иксель файлов: База данных (БД), это файл, в который должны попадать данные из следующего типа файлов. Макрос должен запускаться из БД. 5 иксель файлов, это источники данных для БД, назовем их Источник 1, Источник 2, … или совокупно – Источники. МЕХАНИКА СБОРА ДАННЫХ: Каждый месяц я открываю БД и запускаю макрос. Перед этим, я помещаю 5 файлов Источников в определенную папку. ВАЖНЫЕ ОБСТОЯТЕЛЬСТВА ПРОЦЕССА: 1) БД и Источники находятся в определенных папках, перемещение не планируется. 2) Источники – это всегда 5 иксель файлов. 3) Источники каждый месяц помещаются в папку, отдают данные для БД, удаляются и в следующем месяце их место занимаются новые 5 файлов. 4) Каждый из 5 файлов Источников имеет одинаковую структуру, т.е. в каждом Источнике есть 5 листов, содержат обычные таблицы с заголовками и разными форматами значений: текст, число, процент. Листы в каждом Источнике названы одинаково. Столбцы названы одинаково. Объем данных в целом идентичен, кроме как на листе SKU data flat кол-во строк может варьироваться от примерно 150 до 400+. 5) БД тоже содержит 5 листов, название которых нарочно совпадает с таковыми в любом из Источников. 6) На каждый лист БД данные из Источников должны попадать в каждую последующую свободную строку, чтобы не затирать данные, которые там уже будут на тот момент.
ПРИМЕР: В январе 2020 г., в Data Base на лист SKU data flat, должны попасть данные с листа SKU data flat из источника PREE_Operations report_PRU, PREE_Operations report_PRK и других 3х источников. На лист Log data flat должны попасть данные с листа Log data flat из источника PREE_Operations report_PRU, PREE_Operations report_PRK и других 3х источников. И так далее по всем 5 листам. Заполнение линейное, то есть сперва 1й лист Data Base
Набор корректных имен для кода: Файл БД = Data Base, Имена Источников: PREE_Operations report_PRU PREE_Operations report_PRK PREE_Operations report_PRR PREE_Operations report_PRA PREE_Operations report_PRM Имена 5 листов в БД и Источниках: SKU data flat, Log data flat, Invent data flat, Stock evo flat, Cost flat Я заранее благодарю того, кто возьмется за задачу! Попытки написать код я сознательно не выкладываю, потому что там бред. Прилагаю лишь файл Data Base и пример одного из 5 источников (рыжие листы). Если правила предполагают вознаграждение – прошу скоординировать по дальнейшим действиям. Спасибо.
Добрый день! Появилась необходимость работать с данными посредствам VBA. Если Иксель в какой-то мере стал понятным и местами даже родным, то написание кода – пока нет. Есть задача, которая требует ежемесячного обновления одного файла данными из пяти других. Спешу заверить, что форумы я читал, статьи читал, код посложнее чем Hello world осилил, НО сложность и оперативность вышеозначенной задачки вынуждает меня просить о помощи… Поэтому, я обращаюсь, чтобы получить готовый макрос и уже на его основе изучить как это и что это… Итак, есть 2 типа иксель файлов: База данных (БД), это файл, в который должны попадать данные из следующего типа файлов. Макрос должен запускаться из БД. 5 иксель файлов, это источники данных для БД, назовем их Источник 1, Источник 2, … или совокупно – Источники. МЕХАНИКА СБОРА ДАННЫХ: Каждый месяц я открываю БД и запускаю макрос. Перед этим, я помещаю 5 файлов Источников в определенную папку. ВАЖНЫЕ ОБСТОЯТЕЛЬСТВА ПРОЦЕССА: 1) БД и Источники находятся в определенных папках, перемещение не планируется. 2) Источники – это всегда 5 иксель файлов. 3) Источники каждый месяц помещаются в папку, отдают данные для БД, удаляются и в следующем месяце их место занимаются новые 5 файлов. 4) Каждый из 5 файлов Источников имеет одинаковую структуру, т.е. в каждом Источнике есть 5 листов, содержат обычные таблицы с заголовками и разными форматами значений: текст, число, процент. Листы в каждом Источнике названы одинаково. Столбцы названы одинаково. Объем данных в целом идентичен, кроме как на листе SKU data flat кол-во строк может варьироваться от примерно 150 до 400+. 5) БД тоже содержит 5 листов, название которых нарочно совпадает с таковыми в любом из Источников. 6) На каждый лист БД данные из Источников должны попадать в каждую последующую свободную строку, чтобы не затирать данные, которые там уже будут на тот момент.
ПРИМЕР: В январе 2020 г., в Data Base на лист SKU data flat, должны попасть данные с листа SKU data flat из источника PREE_Operations report_PRU, PREE_Operations report_PRK и других 3х источников. На лист Log data flat должны попасть данные с листа Log data flat из источника PREE_Operations report_PRU, PREE_Operations report_PRK и других 3х источников. И так далее по всем 5 листам. Заполнение линейное, то есть сперва 1й лист Data Base
Набор корректных имен для кода: Файл БД = Data Base, Имена Источников: PREE_Operations report_PRU PREE_Operations report_PRK PREE_Operations report_PRR PREE_Operations report_PRA PREE_Operations report_PRM Имена 5 листов в БД и Источниках: SKU data flat, Log data flat, Invent data flat, Stock evo flat, Cost flat Я заранее благодарю того, кто возьмется за задачу! Попытки написать код я сознательно не выкладываю, потому что там бред. Прилагаю лишь файл Data Base и пример одного из 5 источников (рыжие листы). Если правила предполагают вознаграждение – прошу скоординировать по дальнейшим действиям. Спасибо.EL85
Если правила предполагают вознаграждение – прошу скоординировать по дальнейшим действиям.
Вознаграждение предполагают не правила, а объём поставленной задачи. В этом случае тему нужно располагать в разделе Работа / Фриланс [p.s.]Если ни с кем еще не договаривались - пишите мне в личку.[/p.s.]
Если правила предполагают вознаграждение – прошу скоординировать по дальнейшим действиям.
Вознаграждение предполагают не правила, а объём поставленной задачи. В этом случае тему нужно располагать в разделе Работа / Фриланс [p.s.]Если ни с кем еще не договаривались - пишите мне в личку.[/p.s.]Michael_S
Добрый день, нужна помощь в доработке макроса ниже: В исходном варианте он копирует лист 1 из указанного набора книг в текущую книгу. Хотелось бы, чтобы он копировал указанный диапазон (А1:A13) со всех листов 1 (также из всех выбранных книг) но начиная с выделенной мной ячейки текущей книги, в столбец слева направо. (например столбец А,B) А при появлении новых книг, новые данные добавлял бы данные, начиная со столба С. И т.д.
Подскажите как корректно изменить код?
Sub CombineWorkbooks() Dim FilesToOpen Dim x As Integer
Application.ScreenUpdating = False 'отключаем обновление экрана для скорости
'вызываем диалог выбора файлов для импорта FilesToOpen = Application.GetOpenFilename _ (FileFilter:="All files (*.*), *.*", _ MultiSelect:=True, Title:="Files to Merge")
If TypeName(FilesToOpen) = "Boolean" Then MsgBox "Не выбрано ни одного файла!" Exit Sub End If
'проходим по всем выбранным файлам x = 1 While x <= UBound(FilesToOpen) Set importWB = Workbooks.Open(Filename:=FilesToOpen(x)) Sheets(1).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) importWB.Close savechanges:=False x = x + 1 Wend
Application.ScreenUpdating = True End Sub
Добрый день, нужна помощь в доработке макроса ниже: В исходном варианте он копирует лист 1 из указанного набора книг в текущую книгу. Хотелось бы, чтобы он копировал указанный диапазон (А1:A13) со всех листов 1 (также из всех выбранных книг) но начиная с выделенной мной ячейки текущей книги, в столбец слева направо. (например столбец А,B) А при появлении новых книг, новые данные добавлял бы данные, начиная со столба С. И т.д.
Подскажите как корректно изменить код?
Sub CombineWorkbooks() Dim FilesToOpen Dim x As Integer
Application.ScreenUpdating = False 'отключаем обновление экрана для скорости
'вызываем диалог выбора файлов для импорта FilesToOpen = Application.GetOpenFilename _ (FileFilter:="All files (*.*), *.*", _ MultiSelect:=True, Title:="Files to Merge")
If TypeName(FilesToOpen) = "Boolean" Then MsgBox "Не выбрано ни одного файла!" Exit Sub End If
'проходим по всем выбранным файлам x = 1 While x <= UBound(FilesToOpen) Set importWB = Workbooks.Open(Filename:=FilesToOpen(x)) Sheets(1).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) importWB.Close savechanges:=False x = x + 1 Wend
cdj100, Прочитайте Правила форума, создайте свою тему, оформите код тегами с помощью кнопки # Правилами запрещено задавать новые вопросы в чужих темах
cdj100, Прочитайте Правила форума, создайте свою тему, оформите код тегами с помощью кнопки # Правилами запрещено задавать новые вопросы в чужих темахPelena
"Черт возьми, Холмс! Но как??!!" Ю-money 41001765434816