Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Макрос копирования данных с разных листов на один лист - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос копирования данных с разных листов на один лист (Макросы Sub)
Макрос копирования данных с разных листов на один лист
Nat Дата: Четверг, 29.08.2013, 22:31 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день!

Мне потребовалось написать макрос, но с ними я совсем не дружу, поэтому надеюсь на Вашу помощь. Нужно скопировать данные с разных листов на итоговый лист одной и той же книги Excel. Количество столбцов всегда одинаковое, а вот количество строк и листов - разное. При этом желательно, чтобы первую страницу он копировал с заголовком, а остальные - без. Файл прилагаю.

P.S. Пункт 5q в правилах форума я не нашла, поэтому заранее извиняюсь, если опять сделала что-то не так.
К сообщению приложен файл: 3838011.xls (62.5 Kb)
 
Ответить
СообщениеДобрый день!

Мне потребовалось написать макрос, но с ними я совсем не дружу, поэтому надеюсь на Вашу помощь. Нужно скопировать данные с разных листов на итоговый лист одной и той же книги Excel. Количество столбцов всегда одинаковое, а вот количество строк и листов - разное. При этом желательно, чтобы первую страницу он копировал с заголовком, а остальные - без. Файл прилагаю.

P.S. Пункт 5q в правилах форума я не нашла, поэтому заранее извиняюсь, если опять сделала что-то не так.

Автор - Nat
Дата добавления - 29.08.2013 в 22:31
Hugo Дата: Пятница, 30.08.2013, 00:25 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Как это не нашли?
Вот он, под спойлером:
q - задавать новые вопросы в уже созданных чужих или своих темах


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеКак это не нашли?
Вот он, под спойлером:
q - задавать новые вопросы в уже созданных чужих или своих темах

Автор - Hugo
Дата добавления - 30.08.2013 в 00:25
Hugo Дата: Пятница, 30.08.2013, 01:17 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
[vba]
Код
Option Explicit

Sub CopyData()
       Dim sh As Worksheet, r As Range, i&
       Application.ScreenUpdating = False

       Set sh = Worksheets.Add(before:=Worksheets(1))
       Set r = Worksheets(2).Columns(1).Find(1, , xlValues, xlWhole)
       If Not r Is Nothing Then
           r.Offset(-2).EntireRow.Resize(3).Copy sh.Cells(1)
           For i = 2 To Worksheets.Count
               With Worksheets(i)
                   Set r = .Columns(1).Find(1, , xlValues, xlWhole)
                   If Not r Is Nothing Then
                       .Range(r.Offset(1), .Range("AJ" & .Rows.Count).End(xlUp)).Copy _
                     Worksheets(1).Range("B" & .Rows.Count).End(xlUp)(2).Offset(, -1)
                   End If
               End With
           Next
       End If
       Application.ScreenUpdating = True
End Sub
[/vba]
Сперва искал по "Дата отправки КС" - но что-то на последнем листе не искалось (на том, который как пример собранного). Так и не понял, почему - переделал на поиск единицы :(


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
Сообщение[vba]
Код
Option Explicit

Sub CopyData()
       Dim sh As Worksheet, r As Range, i&
       Application.ScreenUpdating = False

       Set sh = Worksheets.Add(before:=Worksheets(1))
       Set r = Worksheets(2).Columns(1).Find(1, , xlValues, xlWhole)
       If Not r Is Nothing Then
           r.Offset(-2).EntireRow.Resize(3).Copy sh.Cells(1)
           For i = 2 To Worksheets.Count
               With Worksheets(i)
                   Set r = .Columns(1).Find(1, , xlValues, xlWhole)
                   If Not r Is Nothing Then
                       .Range(r.Offset(1), .Range("AJ" & .Rows.Count).End(xlUp)).Copy _
                     Worksheets(1).Range("B" & .Rows.Count).End(xlUp)(2).Offset(, -1)
                   End If
               End With
           Next
       End If
       Application.ScreenUpdating = True
End Sub
[/vba]
Сперва искал по "Дата отправки КС" - но что-то на последнем листе не искалось (на том, который как пример собранного). Так и не понял, почему - переделал на поиск единицы :(

Автор - Hugo
Дата добавления - 30.08.2013 в 01:17
SergeyKorotun Дата: Пятница, 30.08.2013, 02:17 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 301
Репутация: 15 ±
Замечаний: 0% ±

Excel 2007
Опередили
[vba]
Код
Sub Start()
     Call CreateSheet
     Call Copy
End Sub
Private Sub CreateSheet()
    On Error Resume Next
    Set wsSheet = Sheets("Итог")
    If Err.Number = 0 Then
       Application.DisplayAlerts = False
       Sheets("Итог").Delete
       Application.DisplayAlerts = True
    End If
    Sheets.Add After:=Sheets(Sheets.Count)
    Sheets(Sheets.Count).Name = "Итог"
End Sub
Private Sub Copy()
  Dim sRng As Range  
  Dim dRng As Range  
     Application.ScreenUpdating = False
     ThisWorkbook.Sheets(1).Activate
     Set sRng = Range("A9:AJ11")
     ThisWorkbook.Sheets(Sheets.Count).Activate
     Set dRng = Range("A1")
     sRng.Copy dRng
     For i = 1 To ThisWorkbook.Sheets.Count - 1
        ThisWorkbook.Sheets(i).Activate
        Set sRng = Range(Cells(12, 1), Cells(ActiveSheet.UsedRange.Rows.Count, ActiveSheet.UsedRange.Columns.Count))
        ThisWorkbook.Sheets(Sheets.Count).Activate
        Set dRng = Cells(ActiveSheet.UsedRange.Rows.Count + 1, 1)
        sRng.Copy dRng
     Next i
     Application.ScreenUpdating = True
End Sub
[/vba]
К сообщению приложен файл: qwerty_.xlsm (32.0 Kb)
 
Ответить
СообщениеОпередили
[vba]
Код
Sub Start()
     Call CreateSheet
     Call Copy
End Sub
Private Sub CreateSheet()
    On Error Resume Next
    Set wsSheet = Sheets("Итог")
    If Err.Number = 0 Then
       Application.DisplayAlerts = False
       Sheets("Итог").Delete
       Application.DisplayAlerts = True
    End If
    Sheets.Add After:=Sheets(Sheets.Count)
    Sheets(Sheets.Count).Name = "Итог"
End Sub
Private Sub Copy()
  Dim sRng As Range  
  Dim dRng As Range  
     Application.ScreenUpdating = False
     ThisWorkbook.Sheets(1).Activate
     Set sRng = Range("A9:AJ11")
     ThisWorkbook.Sheets(Sheets.Count).Activate
     Set dRng = Range("A1")
     sRng.Copy dRng
     For i = 1 To ThisWorkbook.Sheets.Count - 1
        ThisWorkbook.Sheets(i).Activate
        Set sRng = Range(Cells(12, 1), Cells(ActiveSheet.UsedRange.Rows.Count, ActiveSheet.UsedRange.Columns.Count))
        ThisWorkbook.Sheets(Sheets.Count).Activate
        Set dRng = Cells(ActiveSheet.UsedRange.Rows.Count + 1, 1)
        sRng.Copy dRng
     Next i
     Application.ScreenUpdating = True
End Sub
[/vba]

Автор - SergeyKorotun
Дата добавления - 30.08.2013 в 02:17
Nat Дата: Пятница, 30.08.2013, 15:09 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Благодарю за помощь! Первый вариант рабочий. Во втором макрос копировал в исходную книгу (удалила "ThisWorkbook" в тексте - стал копировать в новый документ, хотя не уверена что именно это н.б. сделать) и только первые два листа (как это исправить - не знаю, да это уже и не так важно)...Полезная это вещь - макросы! Надо будет освоить хотя бы азы. Еще раз спасибо за помощь! :)
 
Ответить
СообщениеБлагодарю за помощь! Первый вариант рабочий. Во втором макрос копировал в исходную книгу (удалила "ThisWorkbook" в тексте - стал копировать в новый документ, хотя не уверена что именно это н.б. сделать) и только первые два листа (как это исправить - не знаю, да это уже и не так важно)...Полезная это вещь - макросы! Надо будет освоить хотя бы азы. Еще раз спасибо за помощь! :)

Автор - Nat
Дата добавления - 30.08.2013 в 15:09
SergeyKorotun Дата: Пятница, 30.08.2013, 15:27 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 301
Репутация: 15 ±
Замечаний: 0% ±

Excel 2007
Nat, ThisWorkbook - это книга с которой вы запускаете макрос. По всей видимости вы вставили макрос не в ту книгу.
[vba]
Код
For i = 1 To ThisWorkbook.Sheets.Count - 1
[/vba] с первого листа по предпоследний.
Копирует только с двух наверно по той самой причине: не в ту книгу вставили макрос.
Скачайте qwerty_.xlsm, добавьте туда листов и запустите макрос и вы увидите что макрос обработает все листы.
В варианте Hugo в итоговом листе при повторных запусках строки будут дублироваться.
 
Ответить
СообщениеNat, ThisWorkbook - это книга с которой вы запускаете макрос. По всей видимости вы вставили макрос не в ту книгу.
[vba]
Код
For i = 1 To ThisWorkbook.Sheets.Count - 1
[/vba] с первого листа по предпоследний.
Копирует только с двух наверно по той самой причине: не в ту книгу вставили макрос.
Скачайте qwerty_.xlsm, добавьте туда листов и запустите макрос и вы увидите что макрос обработает все листы.
В варианте Hugo в итоговом листе при повторных запусках строки будут дублироваться.

Автор - SergeyKorotun
Дата добавления - 30.08.2013 в 15:27
Nat Дата: Пятница, 30.08.2013, 15:52 | Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 50
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Да, с дублированием в варианте Hugo я уже столкнулась.
Последовала вашему совету и поновой запустила макрос - действительно все ок. Спасибо!
 
Ответить
СообщениеДа, с дублированием в варианте Hugo я уже столкнулась.
Последовала вашему совету и поновой запустила макрос - действительно все ок. Спасибо!

Автор - Nat
Дата добавления - 30.08.2013 в 15:52
Hugo Дата: Пятница, 30.08.2013, 17:30 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3252
Репутация: 707 ±
Замечаний: 0% ±

2019
Не запускайте повторно - не будет дублироваться :)
Если есть такая мания - нужно всего лишь добавить в код удаление первого листа. Если он тот, который лишний. Ну в общем этот вопрос не вопрос.
Зато у меня таблицы могут скакать по листу, и не скопируется лишнее, как в случае
[vba]
Код
Cells(ActiveSheet.UsedRange.Rows.Count, ActiveSheet.UsedRange.Columns.Count))
[/vba]Тут может и недокопироваться, и лишнее скопироваться - зависит от файла. Но если файлы всегда будут именно такие и никто туда руки не сунет - тогда ладно :)


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеНе запускайте повторно - не будет дублироваться :)
Если есть такая мания - нужно всего лишь добавить в код удаление первого листа. Если он тот, который лишний. Ну в общем этот вопрос не вопрос.
Зато у меня таблицы могут скакать по листу, и не скопируется лишнее, как в случае
[vba]
Код
Cells(ActiveSheet.UsedRange.Rows.Count, ActiveSheet.UsedRange.Columns.Count))
[/vba]Тут может и недокопироваться, и лишнее скопироваться - зависит от файла. Но если файлы всегда будут именно такие и никто туда руки не сунет - тогда ладно :)

Автор - Hugo
Дата добавления - 30.08.2013 в 17:30
exelskatyazhelyi Дата: Воскресенье, 19.02.2017, 08:53 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Hugo, привет, всем Гуру экселя. Не могу разобраться с макросом, совсем вот уже 3 день. Нужно собрать данные со всех листов в один, листов больше 100 штук, постоянно дополняется. Кол-во столбцов одинаковое, строк-разное. может кто сможет помочь?
 
Ответить
СообщениеHugo, привет, всем Гуру экселя. Не могу разобраться с макросом, совсем вот уже 3 день. Нужно собрать данные со всех листов в один, листов больше 100 штук, постоянно дополняется. Кол-во столбцов одинаковое, строк-разное. может кто сможет помочь?

Автор - exelskatyazhelyi
Дата добавления - 19.02.2017 в 08:53
Pelena Дата: Воскресенье, 19.02.2017, 09:13 | Сообщение № 10
Группа: Админы
Ранг: Местный житель
Сообщений: 19182
Репутация: 4420 ±
Замечаний: ±

Excel 365 & Mac Excel
exelskatyazhelyi, прочитайте Правила форума и создайте свою тему.
Эта тема закрыта


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
Сообщениеexelskatyazhelyi, прочитайте Правила форума и создайте свою тему.
Эта тема закрыта

Автор - Pelena
Дата добавления - 19.02.2017 в 09:13
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос копирования данных с разных листов на один лист (Макросы Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!