我正在 Excel 电子表格(适用于 Mac 的 Excel 2011)中保存棒球棋盘游戏 Strat-O-Matic 一个赛季的结果。该表格包含联赛赛程和联赛排名。我已经设置好了,这样每当我输入一场比赛的比分时,排名就会更新,以反映参加该场比赛的球队的新胜负记录。
输入比赛得分后,我希望排名能够自动排序,而不必手动按胜率排序。如果这有区别的话,实际上有四个不同的排名表,每个排名表对应这个联盟的四个分区。每次更新电子表格时,它们都应该按胜率单独排序。
任何帮助都将不胜感激,谢谢。
答案1
要对表格进行排序,您需要编写 VBA 脚本。一般来说,一个单元格中的公式不能影响另一个单元格的内容(准确地说是另一个单元格的公式;如果其他单元格包含引用它的公式,则一个单元格可以更改其他单元格的值)。
作为一种解决方法,当您要在更新源表(即时间表)后对目标表(即排名)进行排序时,我们可以间接地进行一些排序:
- 修改源表,使其自动计算排名
- 更新目标表,以便可以通过从源表中查找其内容
VLOOKUP
。
步骤1
将排名设为第一列(即本例中的 A 列),并制定如下公式:
A | B | C
--------------------------------------------------+------+-------------------
Rank | Team | Winning Percentage
=COUNTIF(C$2:C$9,">"&C2)+1 | A | 0.05
=COUNTIF(C$2:C$9,">"&C3)+COUNTIF(C$2:C2, C3)+1 | B | 0.99
=COUNTIF(C$2:C$9,">"&C4)+COUNTIF(C$2:C3, C4)+1 | C | 0.81
=COUNTIF(C$2:C$9,">"&C5)+COUNTIF(C$2:C4, C5)+1 | D | 0.92
=COUNTIF(C$2:C$9,">"&C6)+COUNTIF(C$2:C5, C6)+1 | E | 0.54
=COUNTIF(C$2:C$9,">"&C7)+COUNTIF(C$2:C6, C7)+1 | F | 0.15
=COUNTIF(C$2:C$9,">"&C8)+COUNTIF(C$2:C7, C8)+1 | G | 0.15
=COUNTIF(C$2:C$9,">"&C9)+COUNTIF(C$2:C8, C9)+1 | H | 0.40
请自行更新范围。第一个COUNTIF
计算有多少支球队的胜率高于它,第二个COUNTIF
计算有多少支球队与之持平。这很重要,因为我们不希望重复的排名混淆VLOOKUP
。
例如上面的例子如下所示:
Rank | Team | Winning Percentage
8 | A | 5%
1 | B | 99%
3 | C | 81%
2 | D | 92%
4 | E | 53%
6 | F | 15%
7 | G | 15%
5 | H | 40%
可以看到F队和G队胜率相同,但是排名不同。
第2步
在您的目标表(即排名)中,您需要使用大量内容进行更新VLOOKUP
:
A | B | C
-----+---------------------------------------------+------------------------------------------
Rank | Team | Winning percentage
1 | =VLOOKUP($A2,Schedule!$A$1:$C$9,2,FALSE) | =VLOOKUP($A2,Schedule!$A$1:$C$9,3,FALSE)
2 | =VLOOKUP($A3,Schedule!$A$1:$C$9,2,FALSE) | =VLOOKUP($A3,Schedule!$A$1:$C$9,3,FALSE)
3 | =VLOOKUP($A4,Schedule!$A$1:$C$9,2,FALSE) | =VLOOKUP($A4,Schedule!$A$1:$C$9,3,FALSE)
4 | =VLOOKUP($A5,Schedule!$A$1:$C$9,2,FALSE) | =VLOOKUP($A5,Schedule!$A$1:$C$9,3,FALSE)
5 | =VLOOKUP($A6,Schedule!$A$1:$C$9,2,FALSE) | =VLOOKUP($A6,Schedule!$A$1:$C$9,3,FALSE)
6 | =VLOOKUP($A7,Schedule!$A$1:$C$9,2,FALSE) | =VLOOKUP($A7,Schedule!$A$1:$C$9,3,FALSE)
7 | =VLOOKUP($A8,Schedule!$A$1:$C$9,2,FALSE) | =VLOOKUP($A8,Schedule!$A$1:$C$9,3,FALSE)
8 | =VLOOKUP($A9,Schedule!$A$1:$C$9,2,FALSE) | =VLOOKUP($A9,Schedule!$A$1:$C$9,3,FALSE)
您将获得如下结果:
Rank | Team | Winning percentage
1 | B | 99%
2 | D | 92%
3 | C | 81%
4 | E | 53%
5 | H | 40%
6 | F | 15%
7 | G | 15%
8 | A | 5%