=INDEX(A2:C6,3,2)は、範囲A2:C6の3行目、2列目の値を返します。位置は範囲の左上のセルから数えるので、A2:C6の3行目はシートの4行目です。3や2を変えて、結果が動くのを確かめてください。
| A | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| 1 | Product | Category | Price | Row | Column | Result | |
| 2 | Apple | Fruit | $1.20 | 3 | 2 | Vegetable | |
| 3 | Pear | Fruit | $1.50 | ||||
| 4 | Carrot | Vegetable | $0.80 | ||||
| 5 | Bread | Bakery | $2.40 | ||||
| 6 | Milk | Dairy | $1.10 |
E2が行番号、F2が列番号です。3行目はCarrot、2列目はCategoryなので、G2にはVegetableと表示されます。F2を1にすると商品名に、E2を6にすると#REF!になります。A2:C6には5行しかないからです。
INDEX関数の構文
=INDEX(array, row_num, [column_num])
array(配列): 値を読む範囲(または配列)。row_num(行番号): その何行目か。1から数えます。0ならすべての行です。column_num(列番号): 何列目か。1から数えます。範囲が1列か1行だけなら省略でき、0ならすべての列です。
1列の範囲なら、数は1つで足ります。=INDEX(A2:A6,4)は4番目の項目Breadです。2つ目の形式=INDEX((A2:C3,A5:C6),1,1,2)は複数の範囲のうちの1つから選びますが、使う場面はほとんどありません。
n番目の項目や最後の項目を取り出す
1列の範囲に対するINDEXは、「n番目の項目は何か」に答えます。入力済みのセルを数えるCOUNTAと組み合わせると、増えていくリストの最後の項目を返せます。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Product | Item number | 2 | |
| 2 | Apple | Nth item | Pear | |
| 3 | Pear | Last item | Milk | |
| 4 | Carrot | |||
| 5 | Bread | |||
| 6 | Milk |
D1が2なので、D2はPearを返します。COUNTAは5つの商品を数えるので、D3は5番目のMilkを返します。Milkを消すと、D3はBreadを返します。実際のファイルでは、新しい行も含まれるように両方をA2:A1000のような長い範囲に向けてください。COUNTAがこの方法で使えるのは、列の途中に空のセルがないときだけです。
0で行全体や列全体を返す
行番号の0は「すべての行」を意味するので、INDEX(B2:D5,0,2)は2列目全体です。SUM、AVERAGE、MAXの中で使えば、番号で選んだ列を集計できます。
| A | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| 1 | Region | Jan | Feb | Mar | Month number | Total | |
| 2 | North | 4,200 | 3,900 | 4,800 | 2 | 15,200 | |
| 3 | South | 3,100 | 3,600 | 3,300 | |||
| 4 | East | 5,200 | 4,700 | 5,600 | |||
| 5 | West | 2,800 | 3,000 | 3,400 |
月番号2はFebで、G2はC2:C5を足して15,200になります。F2を3にすると3月です。行全体も同じで、=SUM(INDEX(B2:D5,3,0))はEastを合計します。Excel 2021とMicrosoft 365では、=INDEX(B2:D5,0,2)を単独で使うと4つの値がシートの下方向にスピルします。番号ではなく見出しで列を選ぶには、F2をMATCHに置き換えます。これがINDEXとMATCHの形です。
配列やスピルした結果に対するINDEX
INDEXはシート上の範囲だけでなく、数式が返す配列も読めます。並べ替え、抽出、重複の削除をしたリストを書き出さずに、その中から1つの項目を取り出せます。
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Product | Category | Price | Most expensive | Bread | |
| 2 | Apple | Fruit | $1.20 | Second | Pear | |
| 3 | Pear | Fruit | $1.50 | Cheapest | Carrot | |
| 4 | Carrot | Vegetable | $0.80 | |||
| 5 | Bread | Bakery | $2.40 | |||
| 6 | Milk | Dairy | $1.10 |
SORTBYは5つの商品を価格順に並べて返し、INDEXが1番目(Bread)、2番目(Pear)、昇順の並べ替えからは1番目(Carrot)を取り出します。Milkの価格を3に変えると、Milkがいちばん高い商品になります。スピルしたリストがすでにシート上(たとえばH2)にあるなら、Excel 2021とMicrosoft 365では=INDEX(H2#,2)でその2番目の項目を取り出せます。
練習: 選んだ月を合計する
| A | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| 1 | Region | Jan | Feb | Mar | Month number | Total | |
| 2 | North | 4,200 | 3,900 | 4,800 | 1 | ||
| 3 | South | 3,100 | 3,600 | 3,300 | |||
| 4 | East | 5,200 | 4,700 | 5,600 | |||
| 5 | West | 2,800 | 3,000 | 3,400 |
やってみよう: G2で、INDEXを使ってF2の番号の月(1 = Jan、2 = Feb、3 = Mar)の合計を返してください。
よくある質問
ExcelのINDEX関数は何をしますか?
範囲の中の指定した位置の値を返します。=INDEX(A2:C6,3,2)はA2:C6の3行目、2列目の値を返します。位置はシートの1行目からではなく、範囲の左上のセルから数えます。
INDEXで列の最後の値を取り出すには?
入力済みのセルの数を行番号に使います:=INDEX(B2:B100,COUNTA(B2:B100))は、途中に空白のない列の最後の値を返します。空白があるなら、=LOOKUP(2,1/(B2:B100<>""),B2:B100)が空でない最後の値を返します。
INDEXが#REF!を返すのはなぜですか?
行番号か列番号が範囲より大きいからです。=INDEX(A2:A6,7)は5セルの範囲の7番目の項目を求めているので、#REF!を返します。
INDEXで列全体を返すには?
行番号に0を指定します:=INDEX(B2:D5,0,2)は2列目全体を返します。合計するなら=SUM(INDEX(B2:D5,0,2))のように関数で囲み、Excel 2021とMicrosoft 365ではそのままスピルさせることもできます。