Я хотел бы использовать Excel для управления данными для марафона. Марафон группирует победителей по age
и gender
в category
, и присуждает призы за первое-третье место в каждом category
.
Можно ли использовать Excel для динамического определения победителей, вводя данные на одном листе и автоматически рассчитывая результаты и отображая их на другом листе каким-либо образом?
У меня есть один рабочий лист, содержащий следующие данные для каждой строки:
name, age, gender, age category, overall rank
Я открыт для подходов на основе функций VBA и Excel. Спасибо!
решение1
Если вы хотите обновить worksheet2 при изменении данных на worksheet1, вы можете использовать VBA для создания результирующей страницы, которая будет динамически обновляться.
- На вкладке «Разработчик» нажмите «Visual Basic».
- Разверните папку «Объекты Microsoft Excel» и просмотрите код для Листа1.
Создайте новую функцию с именем:
Private Sub Worksheet_ChangeByVal Target As Range) EndSub
Эта функция вызывается всякий раз, когда изменяются данные на рабочем листе1.
Чтобы обновить данные на основе столбца рейтинга и сделать следующие предположения:
данные находятся в следующих столбцах: Имя: столбец A, Возраст: столбец B, Пол: столбец C, Категория: столбец D, Общий рейтинг: столбец E.
В подпрограмме Worksheet_Change сравните значение в столбце E, столбце рейтинга и перенесите содержимое строки, если участник занял одно из первых четырех мест.
'If data is changed within column 5 (ranking column), repopulate worksheet2
If Target.Column = 5 Then
'Remove all of the old rows except the header
Sheets(2).Rows("2:" & CStr(Sheets(2).UsedRange.Rows.Count)).EntireRow.Delete
'For each row on worksheet1 check if the value in column "E", if the ranking column is less than 4, if it is copy the row onto worksheet2
Dim rowCounter As Integer: rowCounter = 1
For i = 1 To Sheets(1).UsedRange.Rows.Count Step 1
If (Sheets(1).Range("E" & CStr(i)).Value < 4 And Sheets(1).Range("E" & CStr(i)).Value <> "") Then
Sheets(2).Range("A" & CStr(rowCounter + 1)).Value = Sheets(1).Range("A" & CStr(i)).Value
Sheets(2).Range("B" & CStr(rowCounter + 1)).Value = Sheets(1).Range("B" & CStr(i)).Value
Sheets(2).Range("C" & CStr(rowCounter + 1)).Value = Sheets(1).Range("C" & CStr(i)).Value
Sheets(2).Range("D" & CStr(rowCounter + 1)).Value = Sheets(1).Range("D" & CStr(i)).Value
Sheets(2).Range("E" & CStr(rowCounter + 1)).Value = Sheets(1).Range("E" & CStr(i)).Value
rowCounter = rowCounter + 1
End If
Next i
End If
При необходимости введите здесь алгоритм сортировки после переноса данных.
Если вам нужны дополнительные сведения или помощь с сортировкой, пожалуйста, дайте мне знать.
решение2
Да. То, что вы описываете, — это сводная таблица. Щелкните ячейку в исходной таблице данных, вставьте сводную таблицу, нажмите ОК. По умолчанию она будет создана на новом листе. Перетащите возрастную группу, пол и имя в область строк, а ранг — в область значений.
Щелкните правой кнопкой мыши по любому из имен в сводке и используйте Фильтр > Топ 10. Предположим, что верхний ранг равен 1, измените «Верхний» на «Нижний», 10 на 3, и вы получите что-то похожее на это:
Если вы создаете сводную таблицу на основе таблицы Excel (созданной с помощью команды «Вставка» > «Таблица»), то вы можете добавить данные в исходную таблицу, обновить сводную таблицу (на ленте инструментов «Сводная таблица»), и будут отображены текущие результаты.
Копия файла естьздесь.
решение3
для возрастной категории вы можете попробовать сгруппировать их вместе, используя
=IF(*ConditionForCatI*,CatI,IF(*ConditionForCatII*,CatII,...)))
пока не будут заполнены все категории. После этого выберите фильтр под данными. Это позволит вам сортировать их по возрастной группе или полу. (например, если вы хотите сортировать по полу):
- нажмите стрелку вниз рядом с заголовком «пол»
- выберите только мужчину или только женщину
- нажмите стрелку вниз рядом с заголовком времени (я предполагаю, что у вас будет заголовок времени, чтобы определить победителя)
- Сортируйте от А до Я, так как это от наименьшего к наибольшему, и победителем будет признан наименьший хронометраж.
Сделайте то же самое для других категорий, и вы сможете найти победителей.
Ваше здоровье