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

Вход

Регистрация

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

 

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

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос сбора данных из листов (Макросы/Sub)
Макрос сбора данных из листов
Viper25 Дата: Понедельник, 19.12.2016, 11:54 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 93
Репутация: 4 ±
Замечаний: 20% ±

Excel 2007
В Excel есть 2 листа.
Собираю из них данные в один лист.
Данные должны вставляться из указанных в макросе листов ("1" и "2") и на указанный лист - "ОБЩ".
С листа "TEMP" данные вставлять не надо.
[vba]
Код
Sub Sbor()

Application.ScreenUpdating = False
Application.CutCopyMode = False
Application.DisplayAlerts = False

Dim Sbor_f_work As Excel.Workbook
Dim Sbor As Excel.Worksheet
Set Sbor_f_work = ThisWorkbook

Sbor_f_work.Worksheets("1").Range("A4:C12").Copy
Sbor_f_work.Worksheets("ОБЩ").Range("A2:C10").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sbor_f_work.Worksheets("1").Range("A1").Copy
Sbor_f_work.Worksheets("ОБЩ").Range("D2:D10").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Sbor_f_work.Worksheets("2").Range("A4:C12").Copy
Sbor_f_work.Worksheets("ОБЩ").Range("A12:C20").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sbor_f_work.Worksheets("2").Range("A1").Copy
Sbor_f_work.Worksheets("ОБЩ").Range("D12:D20").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Application.ScreenUpdating = True
Application.CutCopyMode = True
Application.DisplayAlerts = True

End Sub
[/vba]
Хочется, чтобы данные листа 2 добавлялись в следующую (после данных c листа 1) пустую строку.
Нашел такой совет.

Сначала копировать нужный диапазон, а затем вставить вот это:
[vba]
Код
NextRow = Range("A65536").End(xlUp).Row + 1
Cells(NextRow, 1).Select
[/vba]
Это и будет первой пустой строкой снизу, а затем уже вставить скопированный заранее диапазон...

Но как применить не знаю.
К сообщению приложен файл: Excel__.xlsm (21.5 Kb)


Сообщение отредактировал Manyasha - Среда, 21.12.2016, 10:28
 
Ответить
СообщениеВ Excel есть 2 листа.
Собираю из них данные в один лист.
Данные должны вставляться из указанных в макросе листов ("1" и "2") и на указанный лист - "ОБЩ".
С листа "TEMP" данные вставлять не надо.
[vba]
Код
Sub Sbor()

Application.ScreenUpdating = False
Application.CutCopyMode = False
Application.DisplayAlerts = False

Dim Sbor_f_work As Excel.Workbook
Dim Sbor As Excel.Worksheet
Set Sbor_f_work = ThisWorkbook

Sbor_f_work.Worksheets("1").Range("A4:C12").Copy
Sbor_f_work.Worksheets("ОБЩ").Range("A2:C10").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sbor_f_work.Worksheets("1").Range("A1").Copy
Sbor_f_work.Worksheets("ОБЩ").Range("D2:D10").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Sbor_f_work.Worksheets("2").Range("A4:C12").Copy
Sbor_f_work.Worksheets("ОБЩ").Range("A12:C20").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sbor_f_work.Worksheets("2").Range("A1").Copy
Sbor_f_work.Worksheets("ОБЩ").Range("D12:D20").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Application.ScreenUpdating = True
Application.CutCopyMode = True
Application.DisplayAlerts = True

End Sub
[/vba]
Хочется, чтобы данные листа 2 добавлялись в следующую (после данных c листа 1) пустую строку.
Нашел такой совет.

Сначала копировать нужный диапазон, а затем вставить вот это:
[vba]
Код
NextRow = Range("A65536").End(xlUp).Row + 1
Cells(NextRow, 1).Select
[/vba]
Это и будет первой пустой строкой снизу, а затем уже вставить скопированный заранее диапазон...

Но как применить не знаю.

Автор - Viper25
Дата добавления - 19.12.2016 в 11:54
Manyasha Дата: Понедельник, 19.12.2016, 12:06 | Сообщение № 2
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Viper25, Оформите код тегами (кнопка #)


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеViper25, Оформите код тегами (кнопка #)

Автор - Manyasha
Дата добавления - 19.12.2016 в 12:06
Kuzmich Дата: Понедельник, 19.12.2016, 12:26 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 712
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Viper25
Я же вам уже ответил на PlanetaExcel
 
Ответить
СообщениеViper25
Я же вам уже ответил на PlanetaExcel

Автор - Kuzmich
Дата добавления - 19.12.2016 в 12:26
Viper25 Дата: Понедельник, 19.12.2016, 12:58 | Сообщение № 4
Группа: Пользователи
Ранг: Участник
Сообщений: 93
Репутация: 4 ±
Замечаний: 20% ±

Excel 2007
Kuzmich, надо с определенных листов, а не For Each Sht In Worksheets
 
Ответить
СообщениеKuzmich, надо с определенных листов, а не For Each Sht In Worksheets

Автор - Viper25
Дата добавления - 19.12.2016 в 12:58
Manyasha Дата: Понедельник, 19.12.2016, 13:40 | Сообщение № 5
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Viper25, предоставьте ссылки на Вашу тему на других форумах. Об этом написано в правилах.


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеViper25, предоставьте ссылки на Вашу тему на других форумах. Об этом написано в правилах.

Автор - Manyasha
Дата добавления - 19.12.2016 в 13:40
Viper25 Дата: Понедельник, 19.12.2016, 15:52 | Сообщение № 6
Группа: Пользователи
Ранг: Участник
Сообщений: 93
Репутация: 4 ±
Замечаний: 20% ±

Excel 2007
 
Ответить
Сообщениеplanetaexcel.ru

Автор - Viper25
Дата добавления - 19.12.2016 в 15:52
Wasilich Дата: Вторник, 20.12.2016, 11:09 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
На основе Вашего кода

А чем другие не нравятся?
К сообщению приложен файл: Viper25.xls (47.0 Kb)


Сообщение отредактировал Wasilich - Вторник, 20.12.2016, 23:34
 
Ответить
СообщениеНа основе Вашего кода

А чем другие не нравятся?

Автор - Wasilich
Дата добавления - 20.12.2016 в 11:09
Viper25 Дата: Вторник, 20.12.2016, 17:58 | Сообщение № 8
Группа: Пользователи
Ранг: Участник
Сообщений: 93
Репутация: 4 ±
Замечаний: 20% ±

Excel 2007
Wasilich, у всех один минус (для меня):
1. сколько раз запустишь макрос, столько раз данные вставятся. Получается дублирование данных.
2. на каком листе стоишь, туда данные и вставляются.
Данные должны вставляться из указанных в макросе листов ("1" и "2") выбранного диапазона и на указанный лист - "ОБЩ".
К сообщению приложен файл: Viper25-1-.xls (59.5 Kb)


Сообщение отредактировал Viper25 - Вторник, 20.12.2016, 18:01
 
Ответить
СообщениеWasilich, у всех один минус (для меня):
1. сколько раз запустишь макрос, столько раз данные вставятся. Получается дублирование данных.
2. на каком листе стоишь, туда данные и вставляются.
Данные должны вставляться из указанных в макросе листов ("1" и "2") выбранного диапазона и на указанный лист - "ОБЩ".

Автор - Viper25
Дата добавления - 20.12.2016 в 17:58
dim34rus Дата: Вторник, 20.12.2016, 18:24 | Сообщение № 9
Группа: Пользователи
Ранг: Участник
Сообщений: 66
Репутация: 10 ±
Замечаний: 0% ±

Excel 2007 - 2013
А как макрос узнает, что данные повторно вставлять не надо?

Здесь остается только два варианта:
1. где-либо рисуем некий флаг, о том, "типа", что данные уже были скопированы/или не были, здесь вам решать. Но тогда, как говориться один раз скопировал и свободен. (или флаг ручками поставил/убрал) но при повторном копировании будут дубли однозначно.
2. Если на первых двух листах нет дублирования, тогда берем первую строчку с первого листа проверяем ее на наличие на целевом листе, если ее там нет, тогда вставляем, если есть, тогда - аревуа, и так со всеми строчками первого листа, по аналогии делаем со вторым, третьим и сколько угодно листов, тогда у вас будет база без дублей, и обновлять ее можно сколько захочешь раз.

Кстати, вспомнил. можно все скопировать на целевой лист, а потом есть штатная функция рядом с консолидацией - "Убрать дубли"

ЗЫЖ В первом посте про исключение дублей ничего не было сказано.


Извращение - это писать формулы в Word'овских таблицах.
ЯД 410014340958327
 
Ответить
СообщениеА как макрос узнает, что данные повторно вставлять не надо?

Здесь остается только два варианта:
1. где-либо рисуем некий флаг, о том, "типа", что данные уже были скопированы/или не были, здесь вам решать. Но тогда, как говориться один раз скопировал и свободен. (или флаг ручками поставил/убрал) но при повторном копировании будут дубли однозначно.
2. Если на первых двух листах нет дублирования, тогда берем первую строчку с первого листа проверяем ее на наличие на целевом листе, если ее там нет, тогда вставляем, если есть, тогда - аревуа, и так со всеми строчками первого листа, по аналогии делаем со вторым, третьим и сколько угодно листов, тогда у вас будет база без дублей, и обновлять ее можно сколько захочешь раз.

Кстати, вспомнил. можно все скопировать на целевой лист, а потом есть штатная функция рядом с консолидацией - "Убрать дубли"

ЗЫЖ В первом посте про исключение дублей ничего не было сказано.

Автор - dim34rus
Дата добавления - 20.12.2016 в 18:24
Wasilich Дата: Вторник, 20.12.2016, 23:24 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
Данные должны вставляться из указанных в макросе листов ("1" и "2") и на указанный лист - "ОБЩ".
Уважаемый, вы зациклились на одном и том же вопросе.
Вы открывали мой пример? Там кнопка, запускающая макрос, только на листе ОБЩ. Из других листов макрос не запускается. А если вы запускаете макрос из модуля по F8, то смотреть надо, какой лист активирован.
А на счет дублирования, первый раз чую. yes
Значит надо очищать исходные таблицы, или- читать выше.
[p.s.]В код (под спойлером) добавил Worksheets("ОБЩ"), запускайте от куда хотите![/p.s.]


Сообщение отредактировал Wasilich - Вторник, 20.12.2016, 23:42
 
Ответить
Сообщение
Данные должны вставляться из указанных в макросе листов ("1" и "2") и на указанный лист - "ОБЩ".
Уважаемый, вы зациклились на одном и том же вопросе.
Вы открывали мой пример? Там кнопка, запускающая макрос, только на листе ОБЩ. Из других листов макрос не запускается. А если вы запускаете макрос из модуля по F8, то смотреть надо, какой лист активирован.
А на счет дублирования, первый раз чую. yes
Значит надо очищать исходные таблицы, или- читать выше.
[p.s.]В код (под спойлером) добавил Worksheets("ОБЩ"), запускайте от куда хотите![/p.s.]

Автор - Wasilich
Дата добавления - 20.12.2016 в 23:24
Viper25 Дата: Среда, 21.12.2016, 15:10 | Сообщение № 11
Группа: Пользователи
Ранг: Участник
Сообщений: 93
Репутация: 4 ±
Замечаний: 20% ±

Excel 2007
Спасибо всем за советы и примеры.
Дублирование поборол добавлением в макрос удаления первой строки в листе "ОБЩ". (Если повторно запускаешь макрос, шапка таблицы удаляется. Это наглядно.)


Сообщение отредактировал Viper25 - Среда, 21.12.2016, 15:51
 
Ответить
СообщениеСпасибо всем за советы и примеры.
Дублирование поборол добавлением в макрос удаления первой строки в листе "ОБЩ". (Если повторно запускаешь макрос, шапка таблицы удаляется. Это наглядно.)

Автор - Viper25
Дата добавления - 21.12.2016 в 15:10
Viper25 Дата: Четверг, 22.12.2016, 18:37 | Сообщение № 12
Группа: Пользователи
Ранг: Участник
Сообщений: 93
Репутация: 4 ±
Замечаний: 20% ±

Excel 2007
Подскажите, как сделать прогресс-бар работы макроса.
К сообщению приложен файл: 2159487.xls (43.5 Kb)
 
Ответить
СообщениеПодскажите, как сделать прогресс-бар работы макроса.

Автор - Viper25
Дата добавления - 22.12.2016 в 18:37
Manyasha Дата: Четверг, 22.12.2016, 18:39 | Сообщение № 13
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
Viper25, этот вопрос не относится к исходной теме. Воспользуйтесь поиском по форуму, если ничего не найдете, создавайте новую тему.


ЯД: 410013299366744 WM: R193491431804

Сообщение отредактировал Manyasha - Четверг, 22.12.2016, 18:40
 
Ответить
СообщениеViper25, этот вопрос не относится к исходной теме. Воспользуйтесь поиском по форуму, если ничего не найдете, создавайте новую тему.

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

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