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

VBA перенос данных из ячеек нескольких файлов в один новый

07.05.2013, 00:08. Показов 5710. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
доброго времени суток, друзья!
требуется собрать данные из нескольких одинаковых файлов (форма;книга1) в новую книгу в виде таблицы(База;книга2).
есть макрос который объединяет таблицы с разных файлов, сложноват для меня, честно говоря. как на его основе это реализовать.
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
Sub Объединяет_Листы2_в_один_с_меню()
 
 
    Dim iBeginRange As Object, lCalc As Long, lCol As Long
    Dim oAwb As String, sCopyAddress As String, sSheetName As String
    Dim lLastrow As Long, lLastRowMyBook As Long, li As Long, iLastColumn As Integer
    Dim wsSh As Object, wsDataSheet As Object, bPolyBooks As Boolean, avFiles
 
    On Error Resume Next
    'Выбираем диапазон выборки с книг
    Set iBeginRange = Application.InputBox("Выберите диапазон сбора данных." & vbCrLf & _
                                           "1. При выборе только одной ячейки данные будут собраны со всех листов начиная с этой ячейки. " & _
                                           vbCrLf & "2. При выделении нескольких ячеек данные будут собраны только с указанного диапазона всех листов.", Type:=8)
    'Если диапазон не выбран - завершаем процедуру
    If iBeginRange Is Nothing Then Exit Sub
    'Указываем имя листа
    'Допустимо указывать в имени листа символы подставки ? и *.
    'Если указать только * то данные будут собираться со всех листов
    sSheetName = InputBox("Введите имя листа, с которого собирать данные(если не указан, то данные собираются со всех листов)", "Параметр")
    'Если имя листа не указано - данные будут собраны со вех листов
    If sSheetName = "" Then sSheetName = "*"
    On Error GoTo 0
    'Запрос сбора данных с книг(если Нет - то сбор идет с активной книги)
    If MsgBox("Собрать данные с нескольких книг?", vbInformation + vbYesNo, "Excel-VBA") = vbYes Then
        avFiles = Application.GetOpenFilename("Excel files(*.xls*),*.xls*", , "Выбор файлов", , True)
        If VarType(avFiles) = vbBoolean Then Exit Sub
        bPolyBooks = True
        lCol = 1
    Else
        avFiles = Array(ThisWorkbook.FullName)
    End If
    'отключаем обновление экрана, автопересчет формул и отслеживание событий
    'для скорости выполнения кода и для ибежания ошибок, если в книгах есть иные коды
    With Application
        lCalc = .Calculation
        .ScreenUpdating = False: .EnableEvents = False: .Calculation = xlManual
    End With
    'создаем новый лист в книге для сбора
    ThisWorkbook.Sheets.Add After:=Sheets(Sheets.Count)
    Set wsDataSheet = ThisWorkbook.ActiveSheet
    
    'шапка
    qq = ThisWorkbook.Worksheets("Лист2").Range("A2:M2")
    ThisWorkbook.ActiveSheet.Range("B1:N1") = qq
    ThisWorkbook.ActiveSheet.Range("A1") = "ГОСБ"
        
    'цикл по книгам
    For li = LBound(avFiles) To UBound(avFiles)
        If bPolyBooks Then Workbooks.Open Filename:=avFiles(li)
        oAwb = Dir(avFiles(li), vbDirectory)
        'цикл по листам
        For Each wsSh In Workbooks(oAwb).Sheets
            If wsSh.Name Like sSheetName Then
                'Если имя листа совпадает с именем листа, в который собираем данные
                'и сбор идет только с активной книги - то переходим к следующему листу
                If wsSh.Name = wsDataSheet.Name And bPolyBooks = False Then GoTo NEXT_
                With wsSh
                    Select Case iBeginRange.Count
                    Case 1 'собираем данные начиная с указанной ячейки и до конца данных
                        lLastrow = .Cells(1, 1).SpecialCells(xlLastCell).Row
                        iLastColumn = .Cells.SpecialCells(xlLastCell).Column
                        sCopyAddress = .Range(.Cells(iBeginRange.Row, iBeginRange.Column), .Cells(lLastrow, iLastColumn)).Address
                    Case Else 'собираем данные с фиксированного диапазона
                        sCopyAddress = iBeginRange.Address
                    End Select
                    lLastRowMyBook = wsDataSheet.Cells.SpecialCells(xlLastCell).Row + 1
                    'вставляем имя книги, с которой собраны данные
                    If lCol Then wsDataSheet.Cells(lLastRowMyBook, 1).Resize(Range(sCopyAddress).Rows.Count).Value = oAwb
                    .Range(sCopyAddress).Copy wsDataSheet.Cells(lLastRowMyBook, 1).Offset(, lCol)
                End With
            End If
NEXT_:
        Next wsSh
        If bPolyBooks Then Workbooks(oAwb).Close False
    Next li
    With Application
        lCalc = .Calculation
        .ScreenUpdating = True: .EnableEvents = True: .Calculation = lCalc
    End With
как сделать чтобы
1.без запроса он сразу с конкретных ячеек указанных файлов добавлял бы данные в новую книгу (базу) в строки.
переносятся только ячейки В1-В5, В12 и колонка примечание
2. в форме есть колонка Примечание, в ней 5 строк. в таблице в которую будут собираться данные та же колонка содержит одну ячейку для одного человека соответственно. как сделать что бы данные из пяти колонок книги 1 колонки Примечание, в случае их заполнения, через запятую добавлялись в соответствующую ячейку в базе
3. имя книги вставляте не нужно
Вложения
Тип файла: xls Книга1.xls (24.5 Кб, 66 просмотров)
Тип файла: xls Книга2.xls (20.0 Кб, 48 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.05.2013, 00:08
Ответы с готовыми решениями:

Перенос данных из нескольких файлов excel в один
Как из множества файлов Excel перенести значения в одну сводную таблицу в отдельном файле? Суть в том, что людям рассылаются анкеты в...

Перенос данных из нескольких документов в один через Конвертацию Данных
Может есть у кого примеры такого переноса? Сама задача: Есть много документов с табличной частью Источник. Нужно, чтобы все строки из...

Перенос с нескольких листов на один сводный с разнесением данных
Добрый день! Нужна помощь по переносу данных на один лист с нескольких. Нужно, чтобы строчки шли по-очереди в зависимости от...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.05.2013, 00:08
Помогаю со студенческими работами здесь

Перенос данных из нескольких Excel в один документ Word
Здравствуйте уважаемые! Помогите понять как сделать следующее... В ходе работы некоторой программы на диске С:\ поочередно создаются...

Объединение данных нескольких файлов в один в excell
Есть три файла база_шубы.xls, база_пуховики.xls и база_шапки.xls. В них данные такого плана: модель, цена, размер, дата продажи. Если...

Вывод в один файл данных из нескольких Excel файлов
столкнулся со следующей проблемкой... в папке находится несколько однородных по структуре файлов (например 1.xls, 2.xls, 3.xls) ...

Импорт данных из нескольких файлов excel в один файл
Моя проблема состоит вот в чем. Есть, например, три файла в них расчет зарплаты около 200 работников за три месяца. Мне нужно создать...

Макросы на копирование данных из нескольких файлов excel в один файл excel
Здравствуйте! Помогите сделать два макроса в excel, которые будут копировать данные из множества файлов excel в один файл excel. Я...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru