Aby posortować tabelę, musisz napisać skrypt VBA. Ogólnie rzecz biorąc, formuła w komórce nie może mieć wpływu na zawartość innej komórki (formuła drugiej komórki jest dokładna; jedna komórka może zmienić wartość innych komórek, jeśli inne komórki zawierają formułę, która się do niej odnosi).
Jako obejście problemu, ponieważ zamierzasz posortować tabelę docelową (tj. Pozycje) po zaktualizowaniu tabeli źródłowej (tj. Harmonogramu), możemy wykonać sortowanie pośrednio:
- Zmodyfikuj tabelę źródłową, aby ranking został obliczony automatycznie
- Zaktualizuj tabelę docelową, aby jej zawartość była wyszukiwana z tabeli źródłowej przez
VLOOKUP
.
Krok 1
Ustaw ranking w pierwszej kolumnie (np. Kolumna A w tym przykładzie) i utwórz następującą formułę:
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
Zaktualizuj zakres samodzielnie. Pierwszy COUNTIF
liczy, ile drużyn ma wyższy procent wygranych niż drugi i drugi COUNTIF
liczy, ile drużyn z nim wiąże. Jest to ważne, ponieważ nie chcemy, aby zduplikowany ranking mylił VLOOKUP
.
Na przykład powyższy przykład wygląda następująco:
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%
Ponieważ widzisz, że drużyna F i drużyna G mają taki sam procent wygranych, otrzymują inny ranking.
Krok 2
W tabeli docelowej (tzn. Tabelach) musisz ją zaktualizować za pomocą wielu 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)
Otrzymasz wyniki takie jak:
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%