Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/125: Рейтинг темы: голосов - 125, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 17.12.2015
Сообщений: 3

Собрать данные из разных книг в одну

17.12.2015, 11:33. Показов 27088. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.
Прошу помощи в написании макроса, который собирал бы данные из нескольких книг в одну.
таблицы во всех книгах одинаковые: шапка таблицы на 6 строке, ниже построчно идут данные, в каждой таблице может быть разное количество строк. в таблицах одинаковое количество столбцов. По сути макрос должен создать итоговою таблицу, где все строки одна под одной склеятся в одну таблицу (базу данных). строка считается заполненной, если по ней хотя бы в одном столбце содержатся данные. соответственно пустые строки не собираются.

Результирующая таблица имеет такой же вид , как и рабоче книги.

Для примера прикрепляю 2 книги, в которых находятся таблицы.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.12.2015, 11:33
Ответы с готовыми решениями:

Как суммировать данные с разных книг Excel в одну таблицу
Уважаемы гуру VBA помогите новичку не провалить задание.:cry: Дело в том, что с разных отделов ( около 40) мне шлют заполненную таблицу...

Сбор ячеек из разных книг в одну строку новой книги
Как человек не разбирающийся прошу помощи в создании макроса. Есть задача собрать данные для дальнейших операций с ними (выборки,...

Скопировать данные из нескольких книг в одну
Доброго времени суток уважаемые форумчане! Понимаю что тема изъезженная, но все же прошу вас помочь. Прочитал несколько топиков и...

23
0 / 0 / 0
Регистрация: 17.12.2015
Сообщений: 3
17.12.2015, 12:33  [ТС]
В том-то и дело, что хотелось бы просить , чтобы мне показали наиболее подходящий вариант. я уже штук 5 перепробовал, ничего не получается.
0
 Аватар для KoGG
5636 / 1618 / 418
Регистрация: 23.12.2010
Сообщений: 2,426
Записей в блоге: 1
17.12.2015, 16:46
Подходящий вариант.
Вложения
Тип файла: rar Форма_сбора.rar (20.1 Кб, 228 просмотров)
1
 Аватар для KoGG
5636 / 1618 / 418
Регистрация: 23.12.2010
Сообщений: 2,426
Записей в блоге: 1
17.12.2015, 16:55
Лучше проверку данных не копировать.
Вложения
Тип файла: rar Форма_сбора.rar (19.5 Кб, 316 просмотров)
0
0 / 0 / 0
Регистрация: 17.12.2015
Сообщений: 3
17.12.2015, 18:14  [ТС]
Благодарю, будем пробовать).

Добавлено через 48 минут
Работает замечательно! Огромное спасибо. Единственный вопрос, в какой строке предусматривается возможность прописать имя листа отличное от "Форма". Или задам вопрос по другому: как добавить еще один вариант с именем листа, откуда собираются данные?
0
 Аватар для KoGG
5636 / 1618 / 418
Регистрация: 23.12.2010
Сообщений: 2,426
Записей в блоге: 1
18.12.2015, 09:30
Здесь можно добавлять имена листов сбора сразу в массив ImenaListovSbora через ","
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
Option Compare Text
 
Sub Собрать_данные()
    ' Макрос собирает данные на активном листе активной книги из всех листов "Форма" xls файлов заданной директории,
    Dim ImenaListovSbora: ImenaListovSbora = Array("Форма", "Реестр")
    Const FirstRow_Cel& = 7          ' Номер строки начала построения
    Const FirstRow& = 7              ' Номер строки начала сбора данных (ниже шапки)
    Dim i&, LastRow&, LastRow_Cel&
    Dim ShCel As Worksheet, Sh As Worksheet, wb_Tek As Workbook
    Dim MyPath$, MyFileName$, MyFullName$
    Set ShCel = ActiveSheet
    LastRow_Cel = FirstRow_Cel
    With ShCel
        i = .UsedRange.Rows.Count + .UsedRange.Row - 1
        If i < FirstRow_Cel Then i = FirstRow_Cel
        .Rows(FirstRow_Cel & ":" & i).ClearContents
    End With
    MyPath = Trim$(ShCel.[C1])
    If Right$(MyPath, 1) <> "" Then MyPath = MyPath & ""
    MyFileName = Dir(MyPath & "*.xls*")
    Do Until MyFileName = ""
        MyFullName = MyPath & MyFileName
        Set wb_Tek = Workbooks.Open(Filename:=MyFullName, UpdateLinks:=0, ReadOnly:=True)
        For Each Sh In wb_Tek.Worksheets
            For i = 0 To UBound(ImenaListovSbora)
                If Sh.Name = ImenaListovSbora(i) Then
                    With Sh
                        LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
                        .Range(.Cells(FirstRow, 1), .Cells(LastRow, 8)).Copy
                        ShCel.Cells(LastRow_Cel, 1).PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                        LastRow_Cel = LastRow_Cel + LastRow - FirstRow + 1
                    End With
                End If
            Next
        Next Sh
        wb_Tek.Close SaveChanges:=False
        MyFileName = Dir
    Loop
    With ShCel
        .Range(.Cells(LastRow_Cel - 1, 1), .Cells(LastRow_Cel - 1, 8)).Copy
        .Cells(LastRow_Cel, 1).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
                SkipBlanks:=False, Transpose:=False
        .Cells(LastRow_Cel, 2).Select
    End With
End Sub
0
0 / 0 / 1
Регистрация: 16.03.2019
Сообщений: 50
23.03.2019, 21:52
Здравствуйте! Наткнулась на Ваш код - очень поможет в работе, спасибо!
Несколько вопросов:
1. как можно подправить код, чтобы вместо того чтобы в файле в строке писать путь, выдавало окно поиска папки?
2. как отключить мерцание экрана при поиске/проверке файлов? (когда файлов много - немного напрягает глаза)
3. как избежать появления окна примерно такого содержания "в буфере обмена много данных. сохранить их...?" если файлов много - замучаешься отвечать

Добавлено через 6 минут
KoGG, прошу прощения, сразу не поняла, как вставить ссылку на ник.
0
18 / 17 / 3
Регистрация: 07.09.2015
Сообщений: 301
24.03.2019, 13:03
Лучший ответ Сообщение было отмечено Остап Бонд как решение

Решение

rinolga,
Ответ на 2ой вопрос:
Перед началом выполненения кода добавьте:
Visual Basic
1
Application.Screenupdating = false
Ответ на 3ий вопрос:
Так же, перед началом выполнения кода, поставте:
Visual Basic
1
Application.DisplayAlerts = false
Рекомендую в конце кода вернуть значения в положения true. Могут возникнуть неприятности, наподобие: закроете книгу отредактированную, она не сохранится и не задаст вопрос о сохранении по причине решения третьего вопроса.
1
0 / 0 / 1
Регистрация: 16.03.2019
Сообщений: 50
24.03.2019, 15:06
Лучший ответ Сообщение было отмечено Остап Бонд как решение

Решение

Schumacher57, спасибо, помогло!
а 1й вопрос помогли решить так:
Visual Basic
1
2
3
4
5
6
With Application.FileDialog(msoFileDialogFolderPicker)
        .ButtonName = "Выбрать папку с отчётами"
        .Title = "Папка"
        If .Show <> -1 Then Exit Sub
        MyPath = .SelectedItems.Item(1) & "\"
    End With
0
18 / 17 / 3
Регистрация: 07.09.2015
Сообщений: 301
24.03.2019, 16:06
Лучший ответ Сообщение было отмечено Остап Бонд как решение

Решение

rinolga, Не за что
Да, это действующий вариант. Есть так же возможность, делать отображение только интересующих файлов, т.е. во время просмотра директории будут отображаться только текстовые файлы или файлы Word.
Не знаю, противоречит ли моё предложение правилам форума. В общем, могу оказать помощь пишите в ЛС или на почту (указана в профиле), подскажу, если смогу или будет время. Абсолютно бесплатно, сам изучаю VBA, будет интересно порешать похожие вопросы.
Не стесняйтесь.
0
0 / 0 / 1
Регистрация: 16.03.2019
Сообщений: 50
24.03.2019, 22:08
Цитата Сообщение от Schumacher57 Посмотреть сообщение
время просмотра директории будут отображаться только текстовые файлы или файлы Word.
текстовые мне в данном случае не нужны нужны только экселевские. Насколько я смогла понять из кода, макрос обрабатывает файлы с маской *.xls*, как раз то что надо
0
0 / 0 / 0
Регистрация: 02.02.2020
Сообщений: 1
05.02.2020, 21:45
Добрый день, воспользовалась данным макросом, правда у меня столбцов и строк в таблицах намного больше, данные переносит. И вроде бы все ничего, но он переносит заливку ячеек темно серую и между данными книг оставляет по тысячи пустых строк, почему это может быть?
0
18 / 17 / 3
Регистрация: 07.09.2015
Сообщений: 301
20.08.2020, 11:52
Лена122,
Это, честно говоря, очень и очень общий вопрос. Правда, со стороны (кто чуть-чуть понимает в VBA), звучит примерно так:
"Я села за машину той же марки, а она не едет, в чём может быть проблема?"
Вот особенно по этой строчке:
Цитата Сообщение от Лена122 Посмотреть сообщение
правда у меня столбцов и строк в таблицах намного больше
Тут надо всё индивидуально смотреть (изменения в один символ в програмном коде, влечёт (хоть и работающий код) за собой с сотню всяких изменений.
По заливке, Cells.ClearFormat - может помочь...
0
Заблокирован
20.08.2020, 16:09
Мдя За полгода Лена решила уже свою проблему наверно?
0
18 / 17 / 3
Регистрация: 07.09.2015
Сообщений: 301
20.08.2020, 16:25
passedbyz сам не знаю, что на меня нашло)
1
0 / 0 / 0
Регистрация: 21.10.2020
Сообщений: 3
21.10.2020, 11:41
Доброго времени суток! Помогите, пожалуйста, с такой задачей. Необходимо собрать данные из разных книг (база с данными олимпиад), с одними и теми же столбцами, но разным количеством строк. Есть еще затруднение в том, что в книге несколько листов (много предметов). Возможен ли такой сбор информации? Буду рада, если сможете помочь! Для наглядности прикрепляю исходную таблицу
Вложения
Тип файла: xls База.xls (602.5 Кб, 33 просмотров)
0
 Аватар для Narimanych
2751 / 1725 / 779
Регистрация: 23.03.2015
Сообщений: 5,449
21.10.2020, 12:45
AnastasiyaAR,
Прикрепите пару книг ...
0
0 / 0 / 0
Регистрация: 21.10.2020
Сообщений: 3
21.10.2020, 15:22
Здравствуйте! Вот для примера 2 школы, три предмета. Объединить надо по предметам в один лист. Например, Химия и там обе школы. Благодарю!
0
0 / 0 / 0
Регистрация: 21.10.2020
Сообщений: 3
21.10.2020, 15:27
Здравствуйте! Вот для примера прикрепляю архив - 2 школы, три предмета. Объединить надо по предметам в один лист. Например, Химия и там обе школы. Благодарю!
Вложения
Тип файла: rar Проба.rar (68.7 Кб, 65 просмотров)
0
0 / 0 / 0
Регистрация: 13.12.2024
Сообщений: 5
17.12.2024, 07:06
Уважаемые форумчане, помогите пожалуйста. У меня очень похожая задача.
Только у меня многие шапки столбцов пустые и все данные начинаются с 13-й строки 2-го столбца.
Есть два файла, которые лежат в разных местах:
D:\Doc\Making.xlsx и D:\Goods.xlsx
В файле Шаблон.xlsm требуется макрос, который копировал бы все данные из всех столбцов.
Первым делом все данные из файла Making.xlsx, затем все данные из файла Goods.xlsx
Количество строк может меняться в обоих файлах.
Все данные нужно импортировать с полной копией формата ячеек из которых импортируются данные.
Данные для импорта начинаются с 13-й строки 2-го столбца в обоих файлах (Making.xlsx и Goods.xlsx)
Все данные для импорта так же должны записываться начиная с 13-й строки 2-го столбца в файл Шаблон.xlsm.
Но в макросе не нужно объединять всё в одну строку, а для каждого файла прописать начало импорта данных отдельно и так же для шаблона отдельно прописать 13-ю строку 2-го столбца. Мне, как человеку не знающему VBA нужно, чтобы была хотябы интуитивная возможность изменить данные начала импорта и данные в какую ячейку начинать записывать.
После импорта данных, нужно чтобы произошло автоматическое сохранение в файл D:\Работа\Прайс.xlsx
В файле шаблон сразу добавил кнопку, которой нужно назначить макрос.
При нажатии на кнопку Обновить, сразу нужно очистить все данные, а потом уже начать импорт.
При сохранении, в файле Прайс.xlsx нужно удалить кнопку Обновить.
Вознагарждение 500 рублей РФ.
Вложения
Тип файла: 7z Shablon.7z (21.5 Кб, 4 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.12.2024, 07:06
Помогаю со студенческими работами здесь

Собрать четыре разных программы в одну (при помощи процедур)
Помогите пожалуйста заключить 4 программы в одну при помощи процедур и функций 1. Program L3_V12_11; const n=100; var a:...

Сравнить данные двух столбцов разных книг
Есть 2 книги, в них n-ое количество данных: Необходимо: 1. сравнить данные 2-х столбцов из разных книг. 2. при совпадении данных, из...

Собрать данные из нескольких ячеек в одну
Доброго Вечера Всем! Уважаемые форумчане &quot;задача&quot; описана в файле. Спасибо!

Как перенести или скопировать определенные данные со всех книг в одну макросом
Здравствуйте. Не знаю как выполнить задачу. Есть несколько открытых книг с листами( книга 2, книга 3 и книга 4). Нужно скопировать или...

Не могу собрать данные из нескольких ячеек в одну
Access 2003 SP3 Здравствуйте, пытаюсь доделать отчет. Весь измучался уже. Не могу собрать данные в 22 столбце в одну ячейку по адресу....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru