配列・配列数式
まず、配列/配列数式について簡単に説明します。
配列とは、簡単にいえば、複数のセルを1つの範囲としてまとめたものです。
そして配列数式とは、配列を作る/扱うための数式表現、または数式そのものを指します。
肌感覚で配列数式をつかむため、一番簡単な配列を作ってみましょう。
たとえばA1セルに
と入力すると、
下図のように、D3からF3までのセル内容がそのまま表示されます。

この「=D3:F3」が「配列数式」であり、この数式が指しているものが「配列」です。
配列数式の計算
配列数式を使うと何がメリットなのか?
それは、複数の範囲のセルを一括して計算することができる、という点です。
さきほどのA1セルに入力した数式を下記のように変えてみます(末尾に & "!"を追加)
そうすると下図のように、3つのセル全部に「!」が追加されました。

もし配列を使わなかった場合、最初は、
A1セルに=D3&"!"、B1セルに=E3&"!"、C1セルに=F3&"!"... と入力
の必要があり、その後、末尾に「!」をつけたいと思ったら
A1セルを=D3&"!"、B1セルを=E3&"!"、C1セルを=F3&"!"... に変える
というように1個1個の数式を修正していかなければなりません。
配列を使うことで、複数のセル範囲に含まれる各セルに対して同じ処理を一括して行うことができることが分かります。
そして、配列に対して行える処理としては、上記のような文字列の連結だけではなく、四則演算や比較も含まれます。
text
1<まとめ>
2・配列を使うと、複数セルを一括して処理できる。
3・可能な処理は、文字列の連結や、四則演算、比較など。
数式の解析
配列について簡単に触れたところで、質問の数式についてみていきましょう
EXCEL
1=IF(COUNTIF($C:$C,$T$2)>=ROW(S1),LARGE(INDEX(($C$1:$C$494=$T$2)*ROW($C$1:$C$494),,),COUNTIF($C:$C,$T$2)-ROW(S1)+1),"")
$ がついていると見にくいので。いったん$を消したベースで説明します。($は連続コピペ時に考慮すればよいため)
EXCEL
1=IF(COUNTIF(C:C,T2)>=ROW(S1),LARGE(INDEX((C1:C494=T2)*ROW(C1:C494),,),COUNTIF(C:C,T2)-ROW(S1)+1),"")
1.INDEX((C1:C494=T2)*ROW(C1:C494),,),
1-1. (C1:C494=T2)*ROW(C1:C494)
1-1-1. (C1:C494=T2)
この数式ですが、
配列(C1:C494)= セル値(T2)
となっています。
つまり配列について「比較」を行っているということですね
よってこの数式は「左の配列の中の各セルが、右のセル値に等しい場合はTRUE、異なる場合はFALSEである配列を返す」、という意味になります。
(この「配列を返す」というところが重要です)
たとえば適当なセルに「=(C1:C494=T2)」を記入すると、
下の図のように、
- 配列「C1:C494」内の各セルのうち、T2(=1)と等しいセルは TRUE, 異なるセルは FALSE として並べた配列
が返ってきていることが分かります。

1-1-2. ROW(C1:C494)
ROW(C1:C494)は、行番号の配列を返します。(下図)

1-1-3. (C1:C494=T2)*ROW(C1:C494)
(C1:C494=T2)*ROW(C1:C494) という数式は、
「配列どうしを掛け算して、その結果を新たな配列として返す」という処理を行っています。(1.で申し上げた通り、配列に対しては四則演算処理が可能)
つまり
TRUE,FALSE が並んだ配列(1-1-1)× 行番号の配列 (1-1-2)
を各要素で行っていることになります。
ここで、EXCELの計算では、TRUEは「1」、FALSEは「0」 と解釈されます。
したがって、「(C1:C494=T2)*ROW(C1:C494)」は下の図のように
- 「C1:C494」の範囲で、値がT2(=1)であるセルの行番号(ただし1ではないセルはゼロ)の配列
を表すことになります。

1-3. INDEX(~,,)
INDEX 関数は、INDEX(配列,行番号,列番号) とすると、配列のうち、指定した行番号・列番号のセルのセル参照を返します。
ただしここでは、行番号、列番号が省略されていますので、配列そのものを返すことになります。
実は 質問のユースケースの場合、最新のExcelであればINDEXで囲まなくても正常に動作します
なのでここではINDEXの意味についてあまり考える必要はないと思います。
INDEXが使われている理由は
- 過去古いバージョンのExcelだと、INDEXがないと動作しなかったから。
- 複数の表を参照する等のカスタマイズを行えるようにするため。
のいずれかと考えられます。
2. LARGE(<1>, COUNTIF($C:$C,$T$2)-ROW(S1)+1)
LARGE 関数:
たとえば LARGE(X, Y) とすると、下記の値を返します。
- 配列X を大きい順に並べ変えた配列のうち、Y 番目の値
一方、「=COUNTIF($C:$C,T$$2)-ROW(S1)+1」 を適当なセルに縦にコピペしていくと、
下の図のように、「C列のうちT2の値の個数=3で始まり、1ずつ小さくなっていく数」になっています。

よって、これをLARGE関数と組み合わせた「 LARGE(<1>, COUNTIF($C:$C,$T$2)-ROW(S1)+1)」という数式(※1)を縦にコピペ(※2)すると
- 1行目: 「LARGE(<1>, COUNTIF($C:$C,$T$2)-ROW(S1)+1)」
→<1>の配列のうち、大きい順から3番目の数 =3
- 2行目: 「LARGE(<1>, COUNTIF($C:$C,$T$2)-ROW(S2)+1)」
→<1>の配列のうち、大きい順から2番目の数 =9
- 3行目: 「LARGE(<1>, COUNTIF($C:$C,$T$2)-ROW(S3)+1)」
→<1>の配列のうち、大きい順から1番目の数 =10
が抽出されることになります。
(※1:「<1>」というのは、上で説明した「0,0,3,0,0,0,0,0,9,10,.....」という配列のことです)
(※2:この数式自体は配列を返す数式ではなく、単純な計算結果しか返さないので、縦に数式をコピペする必要あり)
4番目以降は、0からマイナス値になっていますが、数式の前半の「COUNTIF($C:$C,$T$2)>=ROW(S1)」の条件に当てはまらないので、最終的にはIF文により 空欄("")が表示されることになります。
質問者さんの記載に沿って答えると下記のようになります。
text
1=IF(COUNTIF($C:$C,$T$2)>=ROW(S1) *IFの条件マッチした数で判断→【OK】
2,LARGE( *IF 真の場合で行番号を算出 →【指定した第1引数の配列を、大きい順に並べたとき。第2引数に指定した順位のセルを返す関数】
3INDEX( **これが解りません? →【実は不要】
4($C$1:$C$494=$T$2)*ROW($C$1:$C$494) *範囲?→【C列のうち、T2セルと同じ値となっている行の行番号の配列。ただしT2セルと異なる値のセルはゼロ】
5,,) *範囲全体? →【OK】
6,COUNTIF($C:$C,$T$2)-ROW(S1)+1 *LARGEの位置 →【OK】
7)
8,"" *IF 偽 ブランクを記載 →【OK】
9)
INDEX()はLARGE()の範囲ですが理解できません。
→上記のように少なくとも最新のExcelではINDEXで囲まなくても動作します。おそらく過去の互換性のためか、カスタマイズのためでしょう。
($C$1:$C$494=$T$2) の=は何を意味しますか?範囲($C$1:$C$494)を制約している?
→配列の各要素が $T$2 セルの値と「等しいかどうか」を比較しています。最終的には比較した結果(TRUE/FALSE)の配列を返しています。
($C$1:$C$494=$T$2)*ROW($C$1:$C$494) の*は何を意味しますか?=ROW($C$1:$C$494)は1です。
→配列どうしの掛け算を意味しています。
左の配列の各要素と、右の配列の(対応する)各要素の掛け算の結果が、新たな配列として返ってきます。
=ROW($C$1:$C$494)は1ではなく、行番号の配列になります。
・動作確認環境
Microsoft Excel バージョン2301(Microsoft 365)
OS:Windows 10 Home バージョン 22H2
・回答を作成するにあたって参考にした資料
INDEX 関数 - Microsoft サポート
配列数式のガイドラインと例 - Microsoft サポート
Excelまたは配列を返す関数 - Microsoft サポート