スプレッドシートで売上データから上位3件だけを取り出したいこと、ありますよね。SORT関数で並べ替えたあと、手作業で範囲を選び直すのは地味に面倒です。
TAKE関数を使えば、配列の先頭や末尾から指定した数の行・列をサッと取り出せます。元データはそのまま残り、データが更新されれば結果も自動で追従するので安心です。
この記事では、TAKE関数の基本的な使い方から、SORT・FILTER・UNIQUE・VSTACKとの組み合わせ、DROP関数との違い・使い分け、#CALC!エラーの回避まで実例付きで解説します。
スプレッドシートのTAKE関数とは?
TAKE関数(読み方: テイク関数)は、配列やセル範囲から先頭または末尾の行・列を取り出して返す動的配列関数です。「Take(取る・取得する)」が名前の由来ですよ。
たとえば、10行のデータから先頭3行だけを取り出すことができます。元データと数式でつながっているため、元データが更新されれば結果も自動で反映されます。
TAKE関数にできることをまとめると、次のとおりです。
- 配列の先頭からN行を取り出す(正の数を指定)
- 配列の末尾からN行を取り出す(負の数を指定)
- 列方向の取得もできる(第3引数を使用)
- 行と列を同時に取得することもできる
- SORT・FILTER・UNIQUEなど他の動的配列関数と入れ子にして1つの数式で完結できる
NOTE
TAKE関数はGoogleスプレッドシート独自の関数ではなく、Excel for Microsoft 365 および Excel 2024 でも使用できます。ただし、Excel 2021・Excel 2019・Excel for Mac 2021 以前のバージョンでは未サポートのため、社内ファイル互換性が心配な場合は事前確認をおすすめします。
TAKE関数の基本構文
=TAKE(配列, 行数, [列数])
カッコの中に、対象の範囲と取得する行数・列数を指定します。
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 配列 | 必須 | 取得対象のセル範囲または配列 |
| 行数 | 必須 | 取得する行数。正の数で先頭から、負の数で末尾から取得 |
| 列数 | 任意 | 取得する列数。正の数で左から、負の数で右から取得。省略すると全列が返る |
第2引数(行数)の符号で取得方向が決まります。正の数なら先頭から、負の数なら末尾から取得します。第3引数(列数)も同じルールです。行の取得をスキップして列だけ取得したい場合は、行数に0を指定してくださいね。
TAKE関数が向いている場面
TAKE関数は、こんな場面で特に効果を発揮します。
- 上位N件のランキング表を作りたい: SORTで並べ替えた結果から先頭N行を取り出す
- 直近のデータだけ確認したい: 時系列データから末尾N行を取り出す
- ヘッダー行だけテンプレートとして再利用したい: 先頭1行を取り出して別シートに展開する
- ページネーション風に特定範囲のレコードを抽出したい: DROPで先頭を削除しTAKEで続きを取り出す
- 重複除去後の代表値を絞り込みたい: UNIQUEとセットでカテゴリ一覧の先頭を取り出す
「並べ替え後の絞り込み」を1つの数式で完結できるのが、TAKE関数の大きな魅力です。
TAKE関数の基本的な使い方
ここでは、売上データからTAKE関数で行や列を取り出す例を紹介します。
サンプルデータ
A1:D7に以下のデータが入っているとします。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | 日付 | 担当者 | 商品 | 売上 |
| 2 | 4/1 | 佐藤 | 商品A | 50,000 |
| 3 | 4/2 | 田中 | 商品B | 30,000 |
| 4 | 4/3 | 鈴木 | 商品C | 45,000 |
| 5 | 4/4 | 高橋 | 商品A | 60,000 |
| 6 | 4/5 | 伊藤 | 商品B | 35,000 |
| 7 | 4/6 | 佐藤 | 商品C | 55,000 |
先頭の行を取得する
先頭3行(ヘッダー含む)を取り出します。出力先のセル(たとえばF1)に以下の数式を入力して、Enterを押します。
=TAKE(A1:D7, 3)
| F | G | H | I | |
|---|---|---|---|---|
| 1 | 日付 | 担当者 | 商品 | 売上 |
| 2 | 4/1 | 佐藤 | 商品A | 50,000 |
| 3 | 4/2 | 田中 | 商品B | 30,000 |
第2引数に「3」を指定したので、先頭3行が取り出されました。「1」にすればヘッダー行だけが返ります。
末尾の行を取得する
末尾から取得するには、第2引数に負の数を指定します。
=TAKE(A1:D7, -2)
| F | G | H | I | |
|---|---|---|---|---|
| 1 | 4/5 | 伊藤 | 商品B | 35,000 |
| 2 | 4/6 | 佐藤 | 商品C | 55,000 |
「-2」を指定したので、末尾2行が取り出されました。直近のデータや最新ログだけを確認したいときに便利ですよ。
列を取得する
列方向の取得には第3引数を使います。行の取得をスキップするには、行数に0を指定します。
=TAKE(A1:D7, 0, 2)
| F | G | |
|---|---|---|
| 1 | 日付 | 担当者 |
| 2 | 4/1 | 佐藤 |
| 3 | 4/2 | 田中 |
| 4 | 4/3 | 鈴木 |
| 5 | 4/4 | 高橋 |
| 6 | 4/5 | 伊藤 |
| 7 | 4/6 | 佐藤 |
行数を0にして列数を2に指定したので、左端2列(日付・担当者)だけが取り出されました。右端から取得したい場合は「-2」のように負の数を使います。
行と列を同時に取得する
行と列を同時に取得することもできます。
=TAKE(A1:D7, 3, 2)
| F | G | |
|---|---|---|
| 1 | 日付 | 担当者 |
| 2 | 4/1 | 佐藤 |
| 3 | 4/2 | 田中 |
先頭3行と左端2列を同時に取得します。ヘッダーと必要な列だけをまとめて取り出したいときに、1つの数式で済むので効率的ですよ。
TAKE関数の実務活用パターン
ここからは、実務で頻出する6つの組み合わせパターンを紹介します。コピペで使える形にしているので、ぜひ自分のデータに当てはめて試してみてください。
パターン1: SORT結果から上位N件を取り出す
売上データを降順に並べ替えて、上位3件だけを取り出します。
=TAKE(SORT(A2:D7, 4, FALSE), 3)
スプレッドシートのSORT関数の使い方で売上列(4列目)の降順に並べ替えたあと、TAKEで先頭3行を取り出しています。「並べ替えてから先頭を取る」という2ステップで考えるとわかりやすいです。
これで売上トップ3ランキングが1つの数式で完成します。元データが更新されても、ランキングは自動で組み替わりますよ。
パターン2: UNIQUE結果から先頭だけ取り出す
重複を除いた結果から、先頭の数件だけを取り出せます。
=TAKE(UNIQUE(B2:B7), 3)
スプレッドシートのUNIQUE関数の使い方で重複を除いた担当者名から、先頭3件だけを取得しています。カテゴリ一覧の代表サンプルや、ダッシュボードの上位カテゴリ表示などに便利です。
パターン3: FILTER結果から上位N件を抽出する
条件に合うデータの中から上位N件を取り出します。
=TAKE(SORT(FILTER(A2:D7, C2:C7="商品A"), 4, FALSE), 2)
スプレッドシートのFILTER関数の使い方で「商品A」だけに絞り、SORT関数で売上降順に並べ替えています。TAKEで上位2件を取り出すことで、商品別売上トップ2のような条件付きランキングが作れますよ。
「FILTERで絞る → SORTで並べ替える → TAKEで取り出す」の3ステップを覚えておくと、応用が利きます。
パターン4: DROP + TAKEで中間のデータだけ抽出する
先頭と末尾の両方を除外して、中間部分だけを取り出すことができます。
=TAKE(DROP(A2:D100, 10), 10)
スプレッドシートのDROP関数の使い方で先頭10行を削除したあと、TAKEで10行だけ取り出します。つまり11行目から20行目が返ります。ページネーションのように特定範囲のデータを取り出したいときに便利ですよ。
「2ページ目を表示したい」「11位から20位までを表示したい」といった用途にぴったりです。
パターン5: ヘッダー行だけを取り出してテンプレートにする
表のヘッダー行だけを別のシートに取り出して、テンプレートとして再利用できます。
=TAKE(Sheet1!A1:D1, 1)
先頭1行だけを取得するので、ヘッダー構造がそのままコピーされます。元の表でヘッダーを修正すれば、テンプレートにも自動で反映されますよ。複数の集計シートでヘッダー名を統一したいときに重宝します。
パターン6: VSTACK結合後の先頭サマリーを切り出す
複数シートの売上データを縦結合してから、先頭のサマリー部分だけを取り出すこともできます。
=TAKE(VSTACK(Sheet1!A2:D7, Sheet2!A2:D7), 5)
スプレッドシートのVSTACK関数の使い方で2つのシートのデータを縦に結合し、TAKEで先頭5行だけを表示しています。複数シートをまたいだ全社ランキングの上位だけを切り出す、といった用途で効きます。
SORT・FILTER・UNIQUE・VSTACK・DROPなど、配列を返す関数なら何でもTAKEの引数にできるのが強みです。
DROP関数との違い・使い分け
TAKE関数には、ペアとなるスプレッドシートのDROP関数の使い方があります。どちらも配列のサイズを縮小する関数ですが、アプローチが正反対です。
TAKEとDROPは補集合の関係
| 比較項目 | TAKE関数 | DROP関数 |
|---|---|---|
| 動作 | 指定した行・列を取り出して返す | 指定した行・列を削除して残りを返す |
| 構文 | =TAKE(配列, 行数, [列数]) | =DROP(配列, 行数, [列数]) |
| 引数の構造 | 完全に同じ | 完全に同じ |
| 正の数の意味 | 先頭から取得 | 先頭から削除 |
| 負の数の意味 | 末尾から取得 | 末尾から削除 |
| 結果 | 指定した部分だけ | 指定した部分を除いた残り |
同じデータに対して、TAKEとDROPの結果を比べてみましょう。
=TAKE(A1:A10, 3) → 1行目〜3行目が返る(先頭3行を取得)
=DROP(A1:A10, 3) → 4行目〜10行目が返る(先頭3行を削除)
TAKEが返す部分とDROPが返す部分は、ちょうど補い合う関係です。元の配列をTAKEの結果とDROPの結果に分割しているイメージですね。「元配列 = TAKEの結果 + DROPの結果」 と覚えておくと迷いません。
使い分けの目安
使い分けの目安は次のとおりです。
- 上位N件だけ取り出したい → TAKE関数(「N件取る」が直感的)
- ヘッダー行や合計行を除外したい → DROP関数(「不要な行を消す」が直感的)
- 中間レコードの抽出 → DROP + TAKEの組み合わせ
- 配列を逆に拡張したい → スプレッドシートのEXPAND関数の使い方(TAKEと反対の操作)
迷ったときは「自分がやりたい操作は取る?消す?」と考えてみてください。意図が伝わりやすい方を選ぶと、数式が読みやすくなりますよ。
よくあるエラーと対処法
TAKE関数はシンプルですが、取得する行数の指定を間違えるとエラーになります。
| エラー | 原因 | 対処法 |
|---|---|---|
#CALC! | 取得する行数が配列の行数を超えた | 取得行数を配列の行数以下にする |
#VALUE! | 行数・列数に数値以外(文字列など)を指定した | 引数が数値になっているか確認する |
#REF! | 出力先のセルに既にデータがある | 出力先の範囲を空にする |
#NAME? | 関数名のスペルミス | 「TAKE」のスペルを確認する |
#CALC! エラーの回避(ROWS関数で事前チェック)
特に注意したいのが #CALC! エラーです。たとえば5行しかないデータに =TAKE(A1:A5, 10) と指定すると、存在しない行を取得しようとしてエラーが発生します。
取得前に行数を確認する方法で回避できます。
=IF(ROWS(A1:D10)>=3, TAKE(A1:D10, 3), A1:D10)
スプレッドシートのROWS関数の使い方で行数を取得し、取得可能な場合だけTAKEを実行しています。データ量が変動するシートでは、この事前チェックを入れておくと安全です。
TIP
IFERRORで囲む方法もありますが、他のエラーまで隠してしまう点に注意してください。原因を特定しやすくするには、IF+ROWSの組み合わせがおすすめです。
#VALUE! / #REF! / #NAME? の原因
#VALUE!: 行数・列数に"3"(文字列)のように引用符で囲んだ値を入れているケースが多いです。引用符を外して数値で指定しましょう#REF!: TAKEの出力先に既存のデータや別の数式があると、スピルがブロックされます。出力先範囲を空にすればスピルが復活します#NAME?:TKAEのようなスペルミス、または旧バージョンExcelで開いている場合に発生します。Excel 2021以前ではTAKE自体が存在しません
TAKE関数のよくある質問(FAQ)
Excel 2019 や 2021 でも使えますか?
使えません。TAKE関数は Excel for Microsoft 365 と Excel 2024 でのみサポートされています。Excel 2021・Excel 2019・Excel for Mac 2021以前では #NAME? エラーになるので、互換性が必要なファイルでは利用を避けてください。Googleスプレッドシートでは2023年頃から全ユーザーが利用可能になっています。
ARRAYFORMULAで囲む必要はありますか?
不要です。TAKEは元々配列を返す動的配列関数なので、出力先セルに自動でスピル展開されます。ARRAYFORMULAで囲んでも結果は同じですが、数式が冗長になるだけです。詳しくはスプレッドシートのARRAYFORMULA関数の使い方を参照してください。
行数より多い数値を指定すると0や空白で返りますか?
いいえ、#CALC! エラーが返ります。たとえば5行のデータに =TAKE(A1:A5, 10) を指定すると、配列の行数を超えるためエラーになります。IFとROWSを組み合わせた事前チェックで安全に回避できますよ。
SORTNとTAKE、上位N件抽出はどちらが速いですか?
実用上、どちらも処理速度に大きな差はありません。SORTNは「並べ替え+上位N件」を1つの関数で完結できる専用関数ですが、TAKEはSORT・FILTER・UNIQUE・VSTACKなど他の動的配列関数とも自由に組み合わせられる汎用性が魅力です。条件付き抽出を1段かませたい場合はTAKEとSORT・FILTERの組み合わせが柔軟です。
出力範囲がスピルできない場合はどうすればいいですか?
出力先のセル範囲に既存のデータや別の数式があるとスピルがブロックされ、#REF! エラーになります。対象範囲のセルを削除すればスピルが復活します。連続して数式を組む場合は、TAKEの出力サイズ(行数×列数)を事前に見積もって出力範囲を空けておきましょう。
まとめ
TAKE関数は、配列から指定した行・列を取り出して返す関数です。正の数で先頭から、負の数で末尾から取得できるシンプルな仕組みです。
この記事のポイントをおさらいしておきましょう。
- TAKE関数は
=TAKE(配列, 行数, [列数])で、先頭または末尾の行・列を取り出す - 正の数で先頭から取得、負の数で末尾から取得。符号を変えるだけで方向が切り替わる
- 第3引数を指定すれば、列方向の取得や行と列の同時取得もできる
- SORT関数・FILTER関数・UNIQUE関数・VSTACK関数と組み合わせれば、上位N件抽出や条件付きランキングが1つの数式で完結する
- DROP関数はペア関数で、「指定した分だけ取り出す」のがTAKE、「削除して残す」のがDROP。元配列 = TAKEの結果 + DROPの結果
- 取得行数が配列の行数を超えると
#CALC!エラー。ROWS関数で事前チェックすると安全 - Excel 2021以前では未サポート。Microsoft 365 か Excel 2024 を使用する
まずは =TAKE(A1:D10, 3) の先頭3行取得から試してみてください。SORT関数やFILTER関数と組み合わせれば、ランキング表や条件付き抽出がグッと効率的になりますよ。
