web-dev-qa-db-ja.com

値の1つが更新されるたびに、Excelでテーブルを自動的に並べ替えるにはどうすればよいですか?

野球のボードゲームStrat-O-Maticのシーズンの結果をExcelスプレッドシート(​​Excel 2011 for Mac)に保存しています。シートにはリーグスケジュールとリーグ順位が記載されています。ゲームのスコアを入力するたびに、そのゲームに参加したチームの新しい勝敗記録を反映するように順位が更新されるように、すでに設定しています。

ゲームのスコアを入力した後、勝率で手動で並べ替えるのではなく、順位を自動的に並べ替えたいと思います。それが違いを生む場合、実際には4つの異なる順位表があり、このリーグの4つの部門ごとに1つずつあります。スプレッドシートが更新されるたびに、勝率で個別に並べ替える必要があります。

どんな助けでもありがたいです、ありがとう。

1
adustybowler

テーブルを並べ替えるには、VBAスクリプトを作成する必要があります。一般的に、セル内の数式は他のセルの内容に影響を与えることはできません(正確には、他のセルの数式。他のセルにそれを参照する数式が含まれている場合、1つのセルは他のセルの値を変更できます)。

回避策として、ソーステーブル(つまりスケジュール)を更新した後に宛先テーブル(つまり順位)を並べ替えるときに、間接的に並べ替えを行うことができます。

  1. ランキングが自動的に計算されるようにソーステーブルを変更します
  2. 宛先テーブルを更新して、その内容がソーステーブルから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は、勝率がそれより高いチームの数をカウントし、2番目の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%
2
Kenneth L