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

Вход

Регистрация

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

 

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

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
кнопка для переноса сгруппированных данных на другой лист
grh1 Дата: Суббота, 12.01.2013, 16:31 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 233
Репутация: 0 ±
Замечаний: 40% ±

2019
День добрый!

Подскажите, какой должен быть макрос, чтобы:
На листе1 - «Закупки», есть сгруппированные таблицы с данными, набираемые вручную.
Необходимо, чтобы при открытии любой группировки, была сверху кнопка «ДОБАВИТЬ данные на листы «список1» и «список2»», при нажатии на которую, данные с листа1 переносились бы в перечисленные листы (в «список2» - без колонки «код»)
А если я открою более одной группировки и попытаюсь нажать на кнопку, то выскакивало бы предупреждение типа: «ЗАКРОЙТЕ ВСЕ ГРУППИРОВКИ, ОСТАВИВ НУЖНУЮ»
Спасибо.
К сообщению приложен файл: 0240304.xls (96.5 Kb)


Vadym Gorokh
 
Ответить
СообщениеДень добрый!

Подскажите, какой должен быть макрос, чтобы:
На листе1 - «Закупки», есть сгруппированные таблицы с данными, набираемые вручную.
Необходимо, чтобы при открытии любой группировки, была сверху кнопка «ДОБАВИТЬ данные на листы «список1» и «список2»», при нажатии на которую, данные с листа1 переносились бы в перечисленные листы (в «список2» - без колонки «код»)
А если я открою более одной группировки и попытаюсь нажать на кнопку, то выскакивало бы предупреждение типа: «ЗАКРОЙТЕ ВСЕ ГРУППИРОВКИ, ОСТАВИВ НУЖНУЮ»
Спасибо.

Автор - grh1
Дата добавления - 12.01.2013 в 16:31
light26 Дата: Суббота, 12.01.2013, 19:12 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1351
Репутация: 91 ±
Замечаний: 0% ±

2007, 2010, 2013
Ну, первую часть задачи легко реализовать макрорекордером, при условии, что таблица статична.
Со второй помочь не смогу - не научился smile


Я не волшебник. Я только учусь
 
Ответить
СообщениеНу, первую часть задачи легко реализовать макрорекордером, при условии, что таблица статична.
Со второй помочь не смогу - не научился smile

Автор - light26
Дата добавления - 12.01.2013 в 19:12
grh1 Дата: Суббота, 12.01.2013, 20:02 | Сообщение № 3
Группа: Гости
таблицы на листе1 разные, то маленькое кол-во строк, то большое
 
Ответить
Сообщениетаблицы на листе1 разные, то маленькое кол-во строк, то большое

Автор - grh1
Дата добавления - 12.01.2013 в 20:02
AlexM Дата: Суббота, 12.01.2013, 22:10 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1129 ±
Замечаний: 0% ±

Excel 2003
Цитата (grh1)
Подскажите, какой должен быть макрос

Макрос получился на 22 строки.
См. файл
К сообщению приложен файл: 0240304_new.rar (34.7 Kb)



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.


Сообщение отредактировал AlexM - Суббота, 12.01.2013, 22:12
 
Ответить
Сообщение
Цитата (grh1)
Подскажите, какой должен быть макрос

Макрос получился на 22 строки.
См. файл

Автор - AlexM
Дата добавления - 12.01.2013 в 22:10
grh1 Дата: Суббота, 12.01.2013, 23:42 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 233
Репутация: 0 ±
Замечаний: 40% ±

2019
AlexM, спасибо большое! Просьба к Вам, не могли бы Вы в макросе расписать что и как работает... хотя бы немного?


Vadym Gorokh
 
Ответить
СообщениеAlexM, спасибо большое! Просьба к Вам, не могли бы Вы в макросе расписать что и как работает... хотя бы немного?

Автор - grh1
Дата добавления - 12.01.2013 в 23:42
AlexM Дата: Воскресенье, 13.01.2013, 00:10 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1129 ±
Замечаний: 0% ±

Excel 2003
[vba]
Код
Sub Macros()
Dim adr1 As Long, adr2 As Long, c As Long
For i = 9 To ActiveSheet.UsedRange.Item(ActiveSheet.UsedRange.Count).Row
     If Range("H" & i) = "" And IsNumeric(Range("H" & i + 1)) Then adr1 = i + 1
     If Range("H" & i + 1) = "" And IsNumeric(Range("H" & i)) Then
         adr2 = i
         If Range(adr1 & ":" & adr2).EntireRow.Hidden = False Then c = c + 1: iadr1 = adr1: iadr2 = adr2
     End If
Next i
If c = 0 Then MsgBox "Нет открытых групп", vbOKOnly + vbCritical, "Ошибка"
If c > 1 Then MsgBox "Открыто более одной группы", vbOKOnly + vbCritical, "Ошибка"
If c = 1 Then
     Sheets(2).Range("A2:G1000").Clear
     Sheets(1).Range("B" & iadr1 & ":H" & iadr2 - 3).Copy (Sheets(2).Range("A2"))
     Sheets(1).Range("H" & iadr2 - 2 & ":H" & iadr2).Copy (Sheets(2).Range("G" & iadr2 - iadr1))
     Sheets(3).Range("A2:F1000").Clear
     Sheets(1).Range("B" & iadr1 & ":C" & iadr2 - 3).Copy (Sheets(3).Range("A2"))
     Sheets(1).Range("E" & iadr1 & ":H" & iadr2 - 3).Copy (Sheets(3).Range("C2"))
     Sheets(1).Range("H" & iadr2 - 2 & ":H" & iadr2).Copy (Sheets(3).Range("F" & iadr2 - iadr1))
     MsgBox "Кнопка перенесла данные", vbOKOnly + vbInformation, "УРА!!!"
End If
End Sub
[/vba]
1 - Начало макроса
2 - Описание переменных
3 - Цикл по ячекам столбца H листа "Закупки" с 9 строки до последней заполненной
4 - Условие если i-ая ячейка пустая и следующая число, то запоминаем номер строки с числом (начало группы)
5 - Условие если i-ая ячейка число и следующая пустая, то
6 - запоминаем номер строки с числом (конец группы)
7 - Условие если группа не скрыта, то в переменной "с" считаем не скрытые группы и запоминаем начало и конец группы для использование дальше.
8 - Конец if
9 - Конец цикла
10, 11 - сообщения об неоткрытии групп и открытии больше одной группы
12 - Условие если открыта одна группа, то
13 - Очистка второго листа
14 - Копируем диапазон из группы кроме итоговых сумм
15 - Копируем итоговые суммы
16 - Очистка третьего листа
17 - Копируем диапазон из столбцов В и С группы
18 - Копируем диапазон из столбцов E и H группы
19 - Копируем итоговые суммы
20 - Сообщение о завершении переноса
21 - Конец if
22 - Конец макроса



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
Сообщение[vba]
Код
Sub Macros()
Dim adr1 As Long, adr2 As Long, c As Long
For i = 9 To ActiveSheet.UsedRange.Item(ActiveSheet.UsedRange.Count).Row
     If Range("H" & i) = "" And IsNumeric(Range("H" & i + 1)) Then adr1 = i + 1
     If Range("H" & i + 1) = "" And IsNumeric(Range("H" & i)) Then
         adr2 = i
         If Range(adr1 & ":" & adr2).EntireRow.Hidden = False Then c = c + 1: iadr1 = adr1: iadr2 = adr2
     End If
Next i
If c = 0 Then MsgBox "Нет открытых групп", vbOKOnly + vbCritical, "Ошибка"
If c > 1 Then MsgBox "Открыто более одной группы", vbOKOnly + vbCritical, "Ошибка"
If c = 1 Then
     Sheets(2).Range("A2:G1000").Clear
     Sheets(1).Range("B" & iadr1 & ":H" & iadr2 - 3).Copy (Sheets(2).Range("A2"))
     Sheets(1).Range("H" & iadr2 - 2 & ":H" & iadr2).Copy (Sheets(2).Range("G" & iadr2 - iadr1))
     Sheets(3).Range("A2:F1000").Clear
     Sheets(1).Range("B" & iadr1 & ":C" & iadr2 - 3).Copy (Sheets(3).Range("A2"))
     Sheets(1).Range("E" & iadr1 & ":H" & iadr2 - 3).Copy (Sheets(3).Range("C2"))
     Sheets(1).Range("H" & iadr2 - 2 & ":H" & iadr2).Copy (Sheets(3).Range("F" & iadr2 - iadr1))
     MsgBox "Кнопка перенесла данные", vbOKOnly + vbInformation, "УРА!!!"
End If
End Sub
[/vba]
1 - Начало макроса
2 - Описание переменных
3 - Цикл по ячекам столбца H листа "Закупки" с 9 строки до последней заполненной
4 - Условие если i-ая ячейка пустая и следующая число, то запоминаем номер строки с числом (начало группы)
5 - Условие если i-ая ячейка число и следующая пустая, то
6 - запоминаем номер строки с числом (конец группы)
7 - Условие если группа не скрыта, то в переменной "с" считаем не скрытые группы и запоминаем начало и конец группы для использование дальше.
8 - Конец if
9 - Конец цикла
10, 11 - сообщения об неоткрытии групп и открытии больше одной группы
12 - Условие если открыта одна группа, то
13 - Очистка второго листа
14 - Копируем диапазон из группы кроме итоговых сумм
15 - Копируем итоговые суммы
16 - Очистка третьего листа
17 - Копируем диапазон из столбцов В и С группы
18 - Копируем диапазон из столбцов E и H группы
19 - Копируем итоговые суммы
20 - Сообщение о завершении переноса
21 - Конец if
22 - Конец макроса

Автор - AlexM
Дата добавления - 13.01.2013 в 00:10
grh1 Дата: Воскресенье, 13.01.2013, 00:17 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 233
Репутация: 0 ±
Замечаний: 40% ±

2019
AlexM, а можно этот макрос вставить в ЭтаКнига???
(У Вас в Modules-Module1)
Спасибо за роспись работы макроса.


Vadym Gorokh
 
Ответить
СообщениеAlexM, а можно этот макрос вставить в ЭтаКнига???
(У Вас в Modules-Module1)
Спасибо за роспись работы макроса.

Автор - grh1
Дата добавления - 13.01.2013 в 00:17
AlexM Дата: Воскресенье, 13.01.2013, 00:22 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1129 ±
Замечаний: 0% ±

Excel 2003
Можно.
После переноса макроса кликните ПКМ по кнопке и назначте макрос из модуля Эта книга



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
СообщениеМожно.
После переноса макроса кликните ПКМ по кнопке и назначте макрос из модуля Эта книга

Автор - AlexM
Дата добавления - 13.01.2013 в 00:22
grh1 Дата: Воскресенье, 13.01.2013, 00:50 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 233
Репутация: 0 ±
Замечаний: 40% ±

2019
AlexM, подправьте пожалуйста код, что-то не хочет работать...
(Лист1 "закупки" кнопка "Перенос данных для договора")

не смог прикрепить файл, можно Вам на e-mail сбросить?


Vadym Gorokh

Сообщение отредактировал grh1 - Воскресенье, 13.01.2013, 00:55
 
Ответить
СообщениеAlexM, подправьте пожалуйста код, что-то не хочет работать...
(Лист1 "закупки" кнопка "Перенос данных для договора")

не смог прикрепить файл, можно Вам на e-mail сбросить?

Автор - grh1
Дата добавления - 13.01.2013 в 00:50
AlexM Дата: Воскресенье, 13.01.2013, 00:54 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1129 ±
Замечаний: 0% ±

Excel 2003
Архивируете файл и прикрепляйте. Можно прикрепить файл до 100 Кб



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
СообщениеАрхивируете файл и прикрепляйте. Можно прикрепить файл до 100 Кб

Автор - AlexM
Дата добавления - 13.01.2013 в 00:54
grh1 Дата: Воскресенье, 13.01.2013, 00:56 | Сообщение № 11
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 233
Репутация: 0 ±
Замечаний: 40% ±

2019
AlexM, совсем забыл, что можно арх.
прикрепил
К сообщению приложен файл: --.rar (83.2 Kb)


Vadym Gorokh
 
Ответить
СообщениеAlexM, совсем забыл, что можно арх.
прикрепил

Автор - grh1
Дата добавления - 13.01.2013 в 00:56
AlexM Дата: Воскресенье, 13.01.2013, 01:09 | Сообщение № 12
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1129 ±
Замечаний: 0% ±

Excel 2003
См. Файл.
К сообщению приложен файл: --new.rar (85.7 Kb)



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
СообщениеСм. Файл.

Автор - AlexM
Дата добавления - 13.01.2013 в 01:09
grh1 Дата: Воскресенье, 13.01.2013, 01:12 | Сообщение № 13
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 233
Репутация: 0 ±
Замечаний: 40% ±

2019
что не правильно я сделал, почему не работал макрос?


Vadym Gorokh
 
Ответить
Сообщениечто не правильно я сделал, почему не работал макрос?

Автор - grh1
Дата добавления - 13.01.2013 в 01:12
AlexM Дата: Воскресенье, 13.01.2013, 01:15 | Сообщение № 14
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1129 ±
Замечаний: 0% ±

Excel 2003
В первом макросе использовались индексы листов, а во втором файле индексы изменились. Сейчас макрос использует имена листов.



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
СообщениеВ первом макросе использовались индексы листов, а во втором файле индексы изменились. Сейчас макрос использует имена листов.

Автор - AlexM
Дата добавления - 13.01.2013 в 01:15
grh1 Дата: Воскресенье, 13.01.2013, 01:15 | Сообщение № 15
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 233
Репутация: 0 ±
Замечаний: 40% ±

2019
понял... спасибо большое Вам.


Vadym Gorokh
 
Ответить
Сообщениепонял... спасибо большое Вам.

Автор - grh1
Дата добавления - 13.01.2013 в 01:15
grh1 Дата: Воскресенье, 13.01.2013, 02:12 | Сообщение № 16
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 233
Репутация: 0 ±
Замечаний: 40% ±

2019
Уважаемый AlexM, при добавлении новой группировки, выдает ошибку - якобы открыта не одна группировка.
Удаляю новую группировку - всё опять работает.
Подправьте пожалуйста код, если не спите.

P.S. Вроде разобрался - в шаблоне дело было...
К сообщению приложен файл: 8607987.rar (99.4 Kb)


Vadym Gorokh

Сообщение отредактировал grh1 - Воскресенье, 13.01.2013, 02:59
 
Ответить
СообщениеУважаемый AlexM, при добавлении новой группировки, выдает ошибку - якобы открыта не одна группировка.
Удаляю новую группировку - всё опять работает.
Подправьте пожалуйста код, если не спите.

P.S. Вроде разобрался - в шаблоне дело было...

Автор - grh1
Дата добавления - 13.01.2013 в 02:12
AlexM Дата: Воскресенье, 13.01.2013, 10:18 | Сообщение № 17
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1129 ±
Замечаний: 0% ±

Excel 2003
Что-то мешало точно определить конец таблицы. Так и не понял что. :-(
При удалении на листе "Закупки" 985 строки макрос начинал работать. Возможно, в этой строке где-то есть ячейка, у которой был изменен формат, поэтому определение конца таблицы неточное.
Определение последней заполненной строки в начальном коде было
[vba]
Код
ActiveSheet.UsedRange.Item(ActiveSheet.UsedRange.Count).Row
[/vba]
заменил на
[vba]
Код
Range("H" & Rows.Count).End(xlUp).Row
[/vba]
Конец таблицы стал определяться правильно.
Из условий убрал лишнее
[vba]
Код
And IsNumeric(Range("H" & i + 1))
[/vba]
и
[vba]
Код
And IsNumeric(Range("H" & i))
[/vba]
К сообщению приложен файл: _new1.rar (99.8 Kb)



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.


Сообщение отредактировал AlexM - Воскресенье, 13.01.2013, 10:21
 
Ответить
СообщениеЧто-то мешало точно определить конец таблицы. Так и не понял что. :-(
При удалении на листе "Закупки" 985 строки макрос начинал работать. Возможно, в этой строке где-то есть ячейка, у которой был изменен формат, поэтому определение конца таблицы неточное.
Определение последней заполненной строки в начальном коде было
[vba]
Код
ActiveSheet.UsedRange.Item(ActiveSheet.UsedRange.Count).Row
[/vba]
заменил на
[vba]
Код
Range("H" & Rows.Count).End(xlUp).Row
[/vba]
Конец таблицы стал определяться правильно.
Из условий убрал лишнее
[vba]
Код
And IsNumeric(Range("H" & i + 1))
[/vba]
и
[vba]
Код
And IsNumeric(Range("H" & i))
[/vba]

Автор - AlexM
Дата добавления - 13.01.2013 в 10:18
grh1 Дата: Воскресенье, 13.01.2013, 10:59 | Сообщение № 18
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 233
Репутация: 0 ±
Замечаний: 40% ±

2019
AlexM, доброе утро!

Цитата (AlexM)
Возможно, в этой строке где-то есть ячейка, у которой был изменен формат


Я убирал подчеркивание... После Вашей последней правки, можно форматировать как хочешь - всё работает.
Спасибо.


Vadym Gorokh
 
Ответить
СообщениеAlexM, доброе утро!

Цитата (AlexM)
Возможно, в этой строке где-то есть ячейка, у которой был изменен формат


Я убирал подчеркивание... После Вашей последней правки, можно форматировать как хочешь - всё работает.
Спасибо.

Автор - grh1
Дата добавления - 13.01.2013 в 10:59
grh1 Дата: Воскресенье, 13.01.2013, 17:49 | Сообщение № 19
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 233
Репутация: 0 ±
Замечаний: 40% ±

2019
AlexM, не хочет переносить... Мешает, как и раньше, верхняя пустая строка. Как сделать, чтобы она всё-таки была?
Интересно, что открывая старые группировки для переноса - там есть эта строка, но все переносится...!?

Я прикрепил два архива, т.к. уже больше 100 Kb
Посмотрите пожалуйста.
К сообщению приложен файл: --part1.rar (99.0 Kb) · --part2.rar (16.0 Kb)


Vadym Gorokh

Сообщение отредактировал grh1 - Воскресенье, 13.01.2013, 17:49
 
Ответить
СообщениеAlexM, не хочет переносить... Мешает, как и раньше, верхняя пустая строка. Как сделать, чтобы она всё-таки была?
Интересно, что открывая старые группировки для переноса - там есть эта строка, но все переносится...!?

Я прикрепил два архива, т.к. уже больше 100 Kb
Посмотрите пожалуйста.

Автор - grh1
Дата добавления - 13.01.2013 в 17:49
AlexM Дата: Воскресенье, 13.01.2013, 18:17 | Сообщение № 20
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1129 ±
Замечаний: 0% ±

Excel 2003
Между групп строк должна быть одна пустая строка. По ней макрос понимает границы групп.
Две пустые строки макрос понимает как конец таблицы.
Может быть для каждого года делать свой лист закупок, с названием "Закупки 2012" и "Закупки 2013"
Если такой вариант вы используете, то в макросе надо отредактировать несколько строк, убрав из них
[vba]
Код
Sheets("закупки").
[/vba]
или заменить на
[vba]
Код
ActiveSheet.
[/vba]
Данные при работе макроса будут браться с активного листа, т.е. на котором нажата кнопка.

PS. Я не проверял, но может быть получится. В ячейку H971 таблицы (желтая) вставьте что-нибудь, точку или ноль.



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.


Сообщение отредактировал AlexM - Воскресенье, 13.01.2013, 18:22
 
Ответить
СообщениеМежду групп строк должна быть одна пустая строка. По ней макрос понимает границы групп.
Две пустые строки макрос понимает как конец таблицы.
Может быть для каждого года делать свой лист закупок, с названием "Закупки 2012" и "Закупки 2013"
Если такой вариант вы используете, то в макросе надо отредактировать несколько строк, убрав из них
[vba]
Код
Sheets("закупки").
[/vba]
или заменить на
[vba]
Код
ActiveSheet.
[/vba]
Данные при работе макроса будут браться с активного листа, т.е. на котором нажата кнопка.

PS. Я не проверял, но может быть получится. В ячейку H971 таблицы (желтая) вставьте что-нибудь, точку или ноль.

Автор - AlexM
Дата добавления - 13.01.2013 в 18:17
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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