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

Обьединение нескольких листов данных в один макросом

11.02.2013, 18:24. Показов 47075. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, подскажите пожалуйста.
У меня есть 30 листов с данными
Мне нужно объединить их в один лист. Как мне записать макрос?
Я копирую данные из первого листа выделяю до последней ячейки с данными, вставляю в общий лист, далее перехожу на новый лист, так же копирую данные, выделяю до последней ячейки. Но у меня кол-во ячеек в каждом листе может меняться, как правильно прописать код?

Кликните здесь для просмотра всего текста
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    Rows("2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    ActiveWindow.ScrollWorkbookTabs Position:=xlLast
    Sheets("Общий").Select
    Range("A2").Select
    ActiveSheet.Paste
    ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
    ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
    Sheets("PIL2PIL_2").Select
    Rows("2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Application.CutCopyMode = False
    Selection.Copy
    ActiveWindow.ScrollWorkbookTabs Position:=xlLast
    Sheets("Общий").Select
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.02.2013, 18:24
Ответы с готовыми решениями:

Создание файлов Word на основе шаблона и обьединение их в один файл макросом из Excel
Макрос в Excel-е создает множество файлов Word на основе шаблона (больше 100), которые в дальнейшем необходимо распечатать "одним...

Сборка данных с нескольких листов в один, копируя только значения
Добрый день! Помогите пожалуйста с макросом: Необходимо собрать данные с нескольких листов книги в один ("архивный"),...

Объединение данных из нескольких листов на один
Добрый день! Подскажите, пожалуйста, макрос который будет выполнять следующие действия: 1. выбирает значения из листа 1 со значением n...

4
 Аватар для Watcher_1
357 / 163 / 27
Регистрация: 21.06.2011
Сообщений: 350
11.02.2013, 21:29
Как смог, понял структуру вашего файла...
Кол-во заполненных строк проверяется по столбцу А
Visual Basic
1
2
3
4
5
6
7
8
9
Sub m()
    For i = 1 To Sheets.Count
        If Sheets(i).Name <> "Общий" Then
           myR_Total = Sheets("Общий").Range("A" & Sheets("Общий").Rows.Count).End(xlUp).Row
           myR_i = Sheets(i).Range("A" & Sheets(i).Rows.Count).End(xlUp).Row
           Sheets(i).Rows("1:" & myR_i).Copy Destination:=Sheets("Общий").Range("A" & myR_Total + 1)
        End If
    Next
End Sub
1
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
11.02.2013, 23:24
Как раз что-то похожее делал для себя. Кидаю вариант и немного обясню. Предполагается, что у меня должен бы быть лист Общих данных "GenExMan" (в даном случае - обобщенный лист счетов с данными). Этот лист (раньше) был разделен так, что для каждого счета создался отдельный лист с именем счета и данными по этому счету. После создания отчета/обработки/ каждого счета, мне нужно опять опять все собрать на новый лист "MergeRecords" и потом вернуть на Android. Представленный код - это фрагмент общего, который все и собирает.
И еще - тут использована функция проверки наличия листа в книге. Если нужно будет - докину (хотя я ее где-то здесь уже выставлял). Старые коментарии - украинским, новые (для Вас) - русским. У меня все работает как часы. Пробуйте.
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
Sub ConsolidateAllSheet()
    Application.ScreenUpdating = False
    ' Проверяем наличие основного листа, с которого будет получено _
          список уникальных названий счетов
    If Not fun_SheetExists("GenExMan") Then ' 
        MsgBox "АРКУШ   " & "GenExMan" & "   ВІДСУТНІЙ."
        Exit Sub
            Else: Sheets("GenExMan").Select
    End If
    ' Проверяем наличие в книге листа, в который будем собирать _
           нужные нам листы.
    If Not fun_SheetExists("MergeRecords") Then
        Sheets.Add ' создаем
            With ActiveSheet
                .Name = "MergeRecords" ' именуем
                .Tab.ColorIndex = 10 ' красим ярлык
            End With ' ActiveSheet
        Sheets("GenExMan").Select
             ' Очищаем "собирательный лист" для новых данных
            Else: Sheets("MergeRecords").Cells.Delete ' _
                                    вивільнюємо аркуш для перезапису.
    End If
    Application.ScreenUpdating = True
    
    Set Dict = CreateObject("Scripting.dictionary") ' создаем словарь
 
    With Sheets("GenExMan")
        Set mRng = Range(.Cells(1, 1), _
                        Cells(1, .UsedRange.Columns.Count))
        counter = 0
        For Each CurrCell In mRng
            counter = counter + 1
            ReDim Preserve arr1(counter)
            arr1(counter) = mRng.Cells(counter) ' _
                                            Назви полів - в масив.
        Next ' CurrCell
        With Sheets("MergeRecords")
            .Cells(1).Resize(1, UBound(arr1)).Value = arr1
        End With
        Erase arr1 ' вивільнення пам'яті.
        With mRng
           ' Определяем в общем листе номер столбца с названиями счетов
            mstr = "Account" ' Знаходимо поле з значенням _
                         "Account" - це будуть ключі Dict.
            Set CurrCell = .Find(What:=mstr, _
                            LookAt:=xlWhole, SearchFormat:=False)
                If mRng Is Nothing Then
                    MsgBox "Не   знайдено !": Exit Sub
                        Else: mCol = CurrCell.Column
                End If
        End With ' mRng
        ' Выбираем уникальные названия счетов
        For i = 2 To .UsedRange.Rows.Count ' отримую _
                                       перелік назв рахунків.
            If Not Dict.exists(Trim(.Cells(i, mCol).Value)) Then
                Dict.Add key:=Trim(.Cells(i, mCol).Value), _
                                        Item:=Trim(.Cells(i, mCol).Value)
            End If
        Next 'i
    End With
    ' Заливаем уникальные названия счетов в массив genKeys. _
           В данном случае ними будут и ключи, и значения словаря. 
    genKeys = Dict.keys ' ключі словника - в масив.
    Set Dict = Nothing ' видаляємо словник.
    ' Ниже - просто проверка при отладке.
''--Results--Verification------------------------
'Stop
'    Application.SendKeys "^g^a {Del}"
'    For i = LBound(genKeys) To UBound(genKeys)
'        Debug.Print genKeys(i)
'    Next 'i
''==End==Verification======================
 
     ' А вот этот коротенький код уже собственно перебирает _
       раздельные листы счетов, заганяет по каждому листу _
       значения в массив  mArr ...
'Stop
    For i = LBound(genKeys) To UBound(genKeys)
        Erase mArr ' очищаємо масив
        With Sheets(genKeys(i))
            mArr = Range(.Cells(2, 1), _
                .Cells(.UsedRange.Rows.Count, .UsedRange.Columns.Count)).Value
        End With
    '... и, наконец, выгружает массив mArr  на сборочный лист "MergeRecords".
'Stop
        With Sheets("MergeRecords")
            r = .UsedRange.Rows.Count + 1
            .Cells(r, 1).Resize(UBound(mArr, 1), _
                    UBound(mArr, 2)).Value = mArr
        End With
    Next 'i
 Stop
        
End Sub
1
0 / 0 / 0
Регистрация: 22.01.2016
Сообщений: 1
22.01.2016, 20:29
Igor_Tr, вечер добрый, не могли бы вы подсказать как использовать ваш макрос в своей таблице?
Лист1 - 44 составляющих для отбора по всем листам ( всего листов 160)
0
0 / 0 / 0
Регистрация: 13.10.2015
Сообщений: 1
08.08.2016, 09:43
Цитата Сообщение от Watcher_1 Посмотреть сообщение
Как смог, понял структуру вашего файла...
Кол-во заполненных строк проверяется по столбцу А
Visual Basic
1
2
3
4
5
6
7
8
9
Sub m()
    For i = 1 To Sheets.Count
        If Sheets(i).Name <> "Общий" Then
           myR_Total = Sheets("Общий").Range("A" & Sheets("Общий").Rows.Count).End(xlUp).Row
           myR_i = Sheets(i).Range("A" & Sheets(i).Rows.Count).End(xlUp).Row
           Sheets(i).Rows("1:" & myR_i).Copy Destination:=Sheets("Общий").Range("A" & myR_Total + 1)
        End If
    Next
End Sub
Доброго дня!
Случайно забрела сюда в поиске макроса по сбору данных и нашла именно то, что нужно.
Только два вопросика, как в данный макрос можно добавить имена листов, откуда копируются данные и каеую команду добавить, чтобы вставлялись значения вместо формул. Заранее благодарю!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.08.2016, 09:43
Помогаю со студенческими работами здесь

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

Автоматическое добавление данных из нескольких листов(таблиц) на один лист(общую таблицу)
Просьба помочь! У меня есть книга,на которой несколько листов с одинаковой структурой.Данные с нескольких листов для разных начальников...

Обьединение нескольких дисков в один
Здравствуйте! Как можно объединить несколько &quot;маленьких&quot; (8см, 1.4 Гб) дисков (с записью), с видеокамеры Sony, в один DVD 4.7 Гб. Чтобы...

Объединение нескольких листов в один
Всем, добрый день. Возник довольно известный вопрос, но решения не удалось найти, перепробовал различные предложенные макросы, но они не...

Выбрать данные из нескольких листов на один лист
Приветствую всех. предистория: на одном листе есть несколько диапазонов ячеек с данными по 2 колонки, причем в одной колонке данные у...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
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
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru