レコードの位置を昨年の位置と比較しています:This year it is ranked 4th out of 50, in 2015 it was ranked 21st
ランクに「st」、「nd」、「rd」、「th」を自動的に追加することは可能ですか?
私のデータはテーブルにあります:
- COL A = データ ポイントの名前 (Bob、Jane、Bill、Anne など)。これは固定列です。
- COL B = 最新年のデータ、
- COL C = 最新年度の階級、
- COL D = 前年のデータ、
- COL E = 前年度の順位。
私は IF 数式の使用にかなり慣れていますが、セルの最後の桁を参照して、IF「1 なら 'st'」、IF「2 なら 'nd'」、IF「3 なら 'rd'」、それ以外の場合は 'th' と指定する方法がよくわかりません。
ランクは複数桁の数字になる場合があることに注意してください。文字は最後の桁に基づきます。したがって、ランク 31 は 31 番目です。10 代のランクにも例外があります。ランク 11、12、13 には「th」が使用されます。
これは数式として実行できますか、それとも VBA で実行する必要がありますか?
答え1
以下は、「ランク」がセルB50にあると仮定しています。
=IF(B50=1,"st",IF(B50=2,"nd",IF(B50=3,"rd","th")))
上記の場合、「st」、「nd」などの結果が得られます。
数字も表示したいと思われるので、
=IF(B50=1,B50 & "st",IF(B50=2,B50 & "nd",IF(B50=3,B50 & "rd",B50 & "th")))
「1位」、「2位」などの結果が表示されます
ejbytes のコメントのおかげで、10 を超えるテストはしませんでした。次のスニペットで 22 番目や 43 番目などを取得できます。
=IF(RIGHT(B50,1) = "1", B50&"st",IF(RIGHT(B50,1)="2",B50&"nd",IF(RIGHT(B50,1)="3",B50&"rd",B50&"th")))
今度は 11、12、13 の問題、さらに 111、112、113 などの問題が発生するので、それらを処理する必要があります。
=IF(RIGHT(B50,2)="11",B50 & "th",IF(RIGHT(B50,2)="12",B50&"th",IF(RIGHT(B50,2)="13",B50&"th",IF(RIGHT(B50,1)="1",B50&"st",IF(RIGHT(B50,1)="2",B50&"nd",IF(RIGHT(B50,1)="3",B50&"rd",B50&"th"))))))
最後に、0 が残ります... 10 番目、50 番目、100 番目、しかし 0 もあります!
=IF(B50=0,0,IF(RIGHT(B50,2)="11",B50&"th",IF(RIGHT(B50,2)="12",B50&"th",IF(RIGHT(B50,2)="13",B50&"th",IF(RIGHT(B50,1)="1",B50&"st",IF(RIGHT(B50,1)="2",B50&"nd",IF(RIGHT(B50,1)="3",B50&"rd",B50&"th")))))))
答え2
@Dave IF 数式を使用して、データ シートにいくつか修正を加える必要がありました。
一番左の数字を認識するには、別の「ヘルパー」列を追加する必要がありました。
- 列Aは元のランク番号です
- 列 B は新しいヘルパー列です =VALUE(RIGHT(A1,1)) これにより、最後の桁が得られます。
列Cには次の式があります
=IF(A1=12,A1&"th",IF(A1=13,A1&"th",IF(B1=1,A1&"st",IF(B1=2,A1&"nd",IF(B1=3,A1&"rd",A1&"th")))))
英語のせいで、特に 12 と 13 を担当しなければなりませんでした。
効果はありますが、目が痛くなるかもしれません。ありがとうございます