ExcelのTAKE関数は、配列から先頭または末尾のN件を取り出す関数です。
「売上上位3件を抽出したい」「最新N件を常に表示したい」に直接答えられます。
この記事では、基本的な使い方から、SORT・FILTER関数との組み合わせ、DROP関数との使い分けまで解説します。
対応バージョン: Microsoft 365 / Excel 2024 以降のみ。Excel 2021 以前は非対応です。
TAKE関数とは?
読み方・語源
TAKE関数(読み方:テイク)は、配列の先頭・末尾から行や列を取り出す関数です。関数名は英語の take(取り出す)に由来します。
結果は複数セルに自動展開されます(スピル動作)。
できること(ひと言で)
- 先頭N行・末尾N行の取り出し
- 先頭N列・末尾N列の取り出し
- 行と列を同時に指定した範囲の切り出し
他の配列関数と組み合わせることで、複雑な抽出も1式で書けます。
対応バージョン(Excel 365 / 2024以降)
| バージョン | 対応 |
|---|---|
| Microsoft 365(Win/Mac) | ○ |
| Excel for the web | ○ |
| Excel 2024 | ○ |
| Excel 2021 | × |
| Excel 2019 以前 | × |
TAKE関数はMicrosoft 365またはExcel 2024以降が必要です。Excel 2021は非対応です。
TAKE関数の書き方
構文と引数
=TAKE(配列, 行数, [列数])
| 引数 | 必須 | 説明 |
|---|---|---|
| 配列 | 必須 | 取り出し元の配列またはセル範囲 |
| 行数 | 必須 | 取り出す行数。正の値→先頭から、負の値→末尾から |
| 列数 | 省略可 | 取り出す列数。正の値→先頭から、負の値→末尾から |
引数「行数」「列数」の正・負の意味
行数・列数の符号で、先頭・末尾どちらから数えるかが変わります。
- 正の値: 先頭から数えてN行(列)を取り出す
- 負の値: 末尾から数えてN行(列)を取り出す
列のみを指定したい場合は、行数の位置をカンマで区切って空にします。
=TAKE(A2:C10, , 2)
第2引数を空のままにすることで、列数だけを指定できます。
先頭のN行を取り出す(正の値)
A2:C10の範囲を使うとします。先頭3行を取り出すには次のように書きます。
=TAKE(A2:C10, 3)
A2:C4に相当する3行分が返されます。
行数が実際の行数を超えても、エラーにはなりません。配列全体が返されます。
注意: 行数に 0 を指定すると
#CALC!エラーになります。0は指定しないでください。
末尾のN行を取り出す(負の値)
末尾3行を取り出すには、行数を負の値にします。
=TAKE(A2:C10, -3)
A2:C10の末尾3行が返されます。A8:C10に相当します。
注文履歴テーブルが日付の古い順に並んでいるとします。末尾3行が最新3件に相当します。
=TAKE(注文履歴テーブル, -3)
「最新N件を常に表示したい」という用途に最適です。
列を指定して取り出す
先頭N列を取り出す
A2:C10を使うとします。先頭2列を取り出すには次のように書きます。
=TAKE(A2:C10, , 2)
A2:B10に相当する2列分が返されます。
末尾N列を取り出す
末尾2列を取り出すには、列数を負の値にします。
=TAKE(A2:C10, , -2)
B2:C10に相当する2列分が返されます。
行と列を同時に指定する
行数と列数の両方を指定すると、矩形範囲を切り出せます。
A2:C10から先頭3行 × 先頭2列を取り出すとします。
=TAKE(A2:C10, 3, 2)
A2:B4に相当する範囲が返されます。
SORT関数と組み合わせてTOP N抽出
売上上位3件を抽出する例
A2:C10に「会社名・商品名・売上」が入っているとします。C列の高い順に上位3件を取り出すには次のように書きます。
=TAKE(SORT(A2:C10, 3, -1), 3)
SORT関数でA2:C10を3列目(C列)基準に降順で並べ替えます。その結果の先頭3行をTAKEで取り出します。
SORT関数の書き方:
=SORT(配列, 並べ替えインデックス, 並べ替え順序)
並べ替え順序は 1=昇順、-1=降順 です。
SORTBY+TAKEで別列基準のランキング
SORTBY関数は、表示する配列と並べ替えの基準列を別々に指定できます。
A2:C10に「会社名・商品名・売上」が入っているとします。C列の高い順に上位3件を取り出すには次のように書きます。
=TAKE(SORTBY(A2:C10, C2:C10, -1), 3)
C2:C10を基準に降順で並べ替えます。その先頭3行をTAKEで取り出します。
SORTと違い、SORTBYは表示範囲外の列を基準にすることもできます。複数の基準列を設定したい場合にも対応しています。
UNIQUE関数と組み合わせて重複除去ランキングを作る
同一の顧客が複数行に登場するデータで「ユニークな顧客の上位N社」を抽出したいときは、UNIQUE関数を先に通してからTAKEを使います。
A2:B10に「顧客名・売上」が入っているとします。重複行を除去したうえで、売上の高い順に上位5社を取り出すには次のように書きます。
=TAKE(SORT(UNIQUE(A2:B10), 2, -1), 5)
UNIQUE関数でA2:B10の重複行を除去します。その結果をSORT関数で2列目(売上)の降順に並べ替え、先頭5行をTAKEで取り出します。
注意点
- UNIQUE適用後の列数が変わる場合は、TAKEの列数引数も合わせて調整してください。
- 同点(同売上)の顧客が複数いる場合、5位にどの顧客が入るかは行の並び順に依存します。ランキングの同点処理が必要な場合はRANK関数との組み合わせを検討してください。
SEQUENCEと組み合わせて連番付きランキング表を作る
TAKEで抽出したランキング結果に自動で連番(1位・2位・3位…)を付けるには、SEQUENCE関数とHSTACKを組み合わせます。
=HSTACK(SEQUENCE(5), TAKE(SORTBY(A2:C10, C2:C10, -1), 5))
SEQUENCE(5)で1〜5の連番列を生成し、TAKE+SORTBYで上位5件の表を作成します。HSTACKが両者を横に結合します。
SEQUENCE・HSTACKともにMicrosoft 365 / Excel 2024以降のみ対応しています。
FILTER関数と組み合わせて条件付き抽出
条件で絞り込んだうえで先頭N件を取り出したいときは、FILTER関数と組み合わせます。
B列が「東京」の行だけを対象にするとします。先頭5件を取り出すには次のように書きます。
=TAKE(FILTER(A2:C10, B2:B10="東京"), 5)
FILTER関数で「B列=東京」の行を抽出します。その結果の先頭5件をTAKEで取り出します。
注意: FILTER関数の結果が0件の場合、
#CALC!エラーになります。IFERROR関数を使ってエラー処理を追加してください。
=IFERROR(TAKE(FILTER(A2:C10, B2:B10="東京"), 5), "該当なし")
直近N件の平均・合計を常に自動更新する(ローリング集計)
TAKE関数の結果は、SUM・AVERAGEなどの集計関数に直接渡せます。「直近N件の平均を常に表示したい」という場面で便利です。
直近3件の平均
=AVERAGE(TAKE(C2:C100, -3))
C列の末尾3件の平均を返します。データを追加するたびに自動的に更新されます。結果は単一セルに返るため、スピルは起きません。
テーブル参照と組み合わせる
Excelのテーブル(ListObject)に変換しておくと、新しい行を追加するたびにTAKEの対象範囲が自動的に拡張されます。
=AVERAGE(TAKE(テーブル1[売上], -3))
SUM・MAX・MIN・COUNTAなど主要な集計関数はすべて同様の形式で使えます。
=SUM(TAKE(テーブル1[売上], -5))
注意: TAKEの第1引数にテーブルの列を指定するのは問題ありません。ただし、テーブルの内部のセルにスピルする数式を置くと #SPILL! エラーになります。集計結果を表示するセルはテーブルの外に置いてください。
DROP関数との使い分け
TAKE vs DROP 比較表
TAKE関数と対になる関数がDROP関数です。構文は同じですが、動作が逆になります。
| 関数 | 動作 | 使いどころ |
|---|---|---|
| TAKE | 指定部分を残す(取り出す) | 「上位3件だけほしい」 |
| DROP | 指定部分を除外する(捨てる) | 「ヘッダー行を除いた残りがほしい」 |
DROP関数の書き方:
=DROP(配列, 行数, [列数])
どちらを使うか判断基準
- 欲しい部分が決まっている → TAKE
- 除外したい部分が決まっている → DROP
A1:C10にヘッダーを含むデータが入っているとします。1行目(ヘッダー)を除いた残りを取り出すには次のように書きます。
=DROP(A1:C10, 1)
TAKEとDROPは組み合わせることもできます。ヘッダーを除いたうえで先頭3件を取り出すとします。
=TAKE(DROP(A1:C10, 1), 3)
DROP関数もTAKEと同様に、Microsoft 365 / Excel 2024以降のみ対応しています。
Excel 2021以前でTAKE関数の代わりに使う数式
TAKE関数はMicrosoft 365 / Excel 2024以降のみ対応しています。社内環境がExcel 2021以前の場合は、以下の代替数式を使ってください。
先頭N行を取り出す(INDEXで代替)
=INDEX(A2:C10, ROW(INDIRECT("1:"&3)), {1,2,3})
入力後にCtrl+Shift+Enterで確定します(配列数式)。3 の部分を取り出したい行数に変えてください。スピルには非対応のため、あらかじめN行分のセルを選択してから数式を入力します。
末尾N行を取り出す(OFFSETで代替)
=OFFSET(A2, ROWS(A2:A10)-3, 0, 3, 3)
A2:A10 が対象範囲、最初の 3 が取り出す行数、最後の 3 が取り出す列数です。ROWS関数で全行数を動的に取得しているため、データが増えても末尾N行を自動参照できます。
代替数式の制限
| 項目 | TAKE関数 | 代替数式(INDEX/OFFSET) |
|---|---|---|
| 対応バージョン | 365 / 2024以降 | Excel 2013以降 |
| 入力方式 | 通常の数式 | 配列数式(Ctrl+Shift+Enter) |
| スピル動作 | 自動展開 | 非対応(手動でN行選択) |
| 可読性 | 高い | 低い(引数が複雑) |
ファイルを共有する相手のExcelバージョンを事前に確認してから、TAKE関数を使うようにしてください。
まとめ・注意点
TAKE関数を使うと、配列から先頭・末尾のN件を簡単に取り出せます。
できること
- 先頭・末尾からN行・N列を取り出す
- SORT・SORTBYと組み合わせてTOP N抽出
- FILTERと組み合わせて条件付き先頭N件を取得
- DROPと組み合わせてより柔軟な範囲切り出し
注意事項
| 注意点 | 詳細 |
|---|---|
| バージョン制限 | Microsoft 365 / Excel 2024以降のみ。Excel 2021は非対応 |
| 行数に0を指定しない | #CALC! エラーになる |
| 配列サイズ超過 | #NUM! エラーになる場合がある |
| 行数・列数に文字列を指定しない | #VALUE! エラーになる |
| スピル動作 | 結果は複数セルに自動展開される |
| 行数が配列を超えた場合 | エラーにならず、配列全体が返される |
TAKE関数はMicrosoft 365環境であれば今すぐ使えます。ぜひSORT関数やFILTER関数と組み合わせて活用してみてください。
配列操作系の関数についてはこちらもご覧ください。
よくある質問
Q: 行数に0を指定すると #CALC! エラーになるのはなぜですか?
TAKE関数は1行以上の取り出しが前提になっています。0は「何も取り出さない」を意味するため、関数の仕様上エラーになります。動的に行数を計算する数式を使っていて0になる可能性がある場合は、IFERRORで囲んでください。
=IFERROR(TAKE(A2:C10, 動的な行数), "")
Q: テーブルの中に数式を入れると #SPILL! になります
Excelのテーブル(ListObject)はスピル動作に対応していません。TAKE関数の結果をスピルさせたい場合は、テーブルの外のセルに数式を置くか、「テーブルを範囲に変換」してから入力してください。
スピル先のセルに既存データや結合セルがある場合も #SPILL! の原因になります。スピル先の範囲を空にしてから、数式を入力し直してください。
Q: スピル範囲全体をSUMで合計するにはどうすればよいですか?
TAKEのスピル結果を別の関数に渡すには # 記号を使います。
=SUM(E2#)
E2にTAKE関数が入っている場合、E2# でスピル範囲全体を参照できます。
Q: Google スプレッドシートでもTAKE関数は使えますか?
使えます。Googleスプレッドシートは2023年以降TAKE関数をサポートしており、構文はExcelと同一です。=TAKE(配列, 行数, [列数]) の形式をそのまま使えます。
