Доброго времени суток! С Exel работаю на уровне "просуммировать строку или столбец", но хочется большего, хотя не все получается. В связи с этим вопрос: как из общего списка(таблицы) сгенерировать списки(таблицы) по нескольким критериям? (Из общей таблицы регистрации участников сформировать стартовые листы по видам программы соревнований для разных возрастных групп?) Дано: ФИО, команда, группа(старшая или младшая), вид программы. Каждый участник может участвовать в нескольких видах. Необходимо получить стартовые листы каждой группы в каждом виде программы, т.е. ФИО, команда, (туры). Буду благодарен за любую подсказку, где копать. С уважением.
Доброго времени суток! С Exel работаю на уровне "просуммировать строку или столбец", но хочется большего, хотя не все получается. В связи с этим вопрос: как из общего списка(таблицы) сгенерировать списки(таблицы) по нескольким критериям? (Из общей таблицы регистрации участников сформировать стартовые листы по видам программы соревнований для разных возрастных групп?) Дано: ФИО, команда, группа(старшая или младшая), вид программы. Каждый участник может участвовать в нескольких видах. Необходимо получить стартовые листы каждой группы в каждом виде программы, т.е. ФИО, команда, (туры). Буду благодарен за любую подсказку, где копать. С уважением.raoalex
Макрос берет данные из листа "Регистр", из строки 1 (столбцы E:H) и из столбцов C:D. Соединяет эти данные и ищет лист с таким именем. И в этот лист копирует данные из столбцов A:B.
[vba]
Код
Sub Сформировать()
Dim shSrc As Worksheet, shRes As Worksheet Dim strVozrast As String Dim arr(), lr As Long, i As Long, j As Long
Application.ScreenUpdating = False
Set shSrc = Worksheets("Регистр") lr = shSrc.Cells(shSrc.Rows.count, "A").End(xlUp).row arr() = shSrc.Range("A1:H" & lr).Value
For i = 3 To UBound(arr) If arr(i, 3) <> "" Then strVozrast = arr(i, 3) Else strVozrast = arr(i, 4) End If For j = 5 To UBound(arr, 2) If arr(i, j) <> "" Then Set shRes = Worksheets(arr(2, j) & strVozrast) lr = shRes.Cells(shRes.Rows.count, "A").End(xlUp).row + 1 shRes.Cells(lr, "A").Resize(, 2).Value = shSrc.Cells(i, "A").Resize(, 2).Value End If Next j Next i
Макрос берет данные из листа "Регистр", из строки 1 (столбцы E:H) и из столбцов C:D. Соединяет эти данные и ищет лист с таким именем. И в этот лист копирует данные из столбцов A:B.
[vba]
Код
Sub Сформировать()
Dim shSrc As Worksheet, shRes As Worksheet Dim strVozrast As String Dim arr(), lr As Long, i As Long, j As Long
Application.ScreenUpdating = False
Set shSrc = Worksheets("Регистр") lr = shSrc.Cells(shSrc.Rows.count, "A").End(xlUp).row arr() = shSrc.Range("A1:H" & lr).Value
For i = 3 To UBound(arr) If arr(i, 3) <> "" Then strVozrast = arr(i, 3) Else strVozrast = arr(i, 4) End If For j = 5 To UBound(arr, 2) If arr(i, j) <> "" Then Set shRes = Worksheets(arr(2, j) & strVozrast) lr = shRes.Cells(shRes.Rows.count, "A").End(xlUp).row + 1 shRes.Cells(lr, "A").Resize(, 2).Value = shSrc.Cells(i, "A").Resize(, 2).Value End If Next j Next i
Karataev, спасибо большое! Но если Exel для меня в облаках, то его макросы, пожалуй, в космосе. Мне казалось, что это можно решить встроенными функциями. Но все равно спасибо, пошел курить макросы.
Karataev, спасибо большое! Но если Exel для меня в облаках, то его макросы, пожалуй, в космосе. Мне казалось, что это можно решить встроенными функциями. Но все равно спасибо, пошел курить макросы.raoalex
делай хорошо, плохо само получится
Сообщение отредактировал raoalex - Среда, 13.03.2019, 19:26
Вариант формулами. На листе "МП1ст" используется допстолбец "H". В допстолбце "H" используется формула массива - завершайте ввод формулы не клавишей Enter (как Вы это обычно делаете), а сочетанием клавиш Ctrl+Shift+Enter. Формула в допстолбце просматривает на листе "Регистр" строки со 2 по 100. Также я формулы вставил на лист "МП2мл". Для остальных листов попробуйте сделать по аналогии. Только имейте ввиду. Если Вы добавите или удалите данные на листе "Регистр", то на листах "МП1ст" и т.д. данные в столбцах Тур останутся на своих местах, а не переместятся вместе с теми данными, напротив которых они записывались.
Вариант формулами. На листе "МП1ст" используется допстолбец "H". В допстолбце "H" используется формула массива - завершайте ввод формулы не клавишей Enter (как Вы это обычно делаете), а сочетанием клавиш Ctrl+Shift+Enter. Формула в допстолбце просматривает на листе "Регистр" строки со 2 по 100. Также я формулы вставил на лист "МП2мл". Для остальных листов попробуйте сделать по аналогии. Только имейте ввиду. Если Вы добавите или удалите данные на листе "Регистр", то на листах "МП1ст" и т.д. данные в столбцах Тур останутся на своих местах, а не переместятся вместе с теми данными, напротив которых они записывались.Karataev
О! Вот это ближе! Осталось только украсить! А насчет Данных в ТУРАХ все в порядке, они заполняются только после окончания Регистрации, во всяком случае, я так рассчитываю. Еще раз большое спасибо!
О! Вот это ближе! Осталось только украсить! А насчет Данных в ТУРАХ все в порядке, они заполняются только после окончания Регистрации, во всяком случае, я так рассчитываю. Еще раз большое спасибо!raoalex