我想使用 Excel 来管理马拉松比赛的数据。马拉松比赛将获胜者按 和age
分组gender
,category
并为每个组的第一至第三名颁发奖品category
。
是否可以使用 Excel 来动态地确定获胜者,通过在单个工作表上输入数据,然后自动计算结果并以某种方式显示在另一个工作表上?
我有一张工作表,其中每行包含以下数据:
name, age, gender, age category, overall rank
我愿意接受基于 VBA 和 Excel 函数的方法。谢谢!
答案1
如果您想在工作表1中的数据被修改时更新工作表2,您可以使用VBA创建一个动态更新的结果页面。
- 在开发人员选项卡中单击 Visual Basic。
- 展开 Microsoft Excel 对象文件夹并查看 Sheet1 的代码
创建一个名为的新函数:
Private Sub Worksheet_ChangeByVal Target As Range) EndSub
每当修改 worksheet1 中的数据时,就会调用此函数。
根据排名列更新数据并做出以下假设:
数据在这些列中:姓名: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,...)))
直到所有类别都填满。之后,选择数据下的过滤器。这将使您能够按年龄组或性别对它们进行排序。(例如,如果您想按性别排序):
- 点击性别标题旁边的向下箭头
- 仅选择男性或仅选择女性
- 单击计时标题旁边的向下箭头(我假设您将通过计时标题来决定获胜者)
- 从 A 到 Z 排序,因为它会显示从最小到最大的数字,获奖者将是最小的时间
对其他类别执行相同操作,即可找到获奖者。
干杯