【Excel】TAKE関数とDROP関数でデータの先頭末尾を取得!Excelの範囲操作を簡略化する方法

【Excel】TAKE関数とDROP関数でデータの先頭末尾を取得!Excelの範囲操作を簡略化する方法
🛡️ 超解決

Excelで特定の範囲のデータを効率的に扱いたい場面があります。例えば、表の先頭から数行だけを取り出したり、逆に末尾の数行を除外してデータ範囲を定義したりする操作です。従来はOFFSET関数やINDEX関数を駆使する必要がありましたが、Microsoft 365の新しい関数TAKE関数とDROP関数を使えば、これらの操作が劇的に簡単になります。本記事では、TAKE関数とDROP関数の使い方と、それらを活用したExcelの範囲操作の簡略化方法について解説します。

TAKE関数とDROP関数は、配列や範囲の指定した行数または列数を取得したり、除外したりできる便利な関数です。これらの関数を理解することで、複雑な数式を記述することなく、データの先頭や末尾の範囲を柔軟に操作できるようになります。Excelでのデータ抽出や集計作業の効率を大幅に向上させることができるでしょう。

【要点】TAKE関数とDROP関数によるExcel範囲操作の簡略化

  • TAKE関数: 配列の先頭から指定した行数または列数を取得します。
  • DROP関数: 配列の先頭から指定した行数または列数を除外した残りの配列を返します。
  • 範囲操作の簡略化: 従来複雑だったデータ範囲の抽出・除外操作を、TAKE関数とDROP関数でシンプルに記述できます。

ADVERTISEMENT

TAKE関数とDROP関数の基本概念

TAKE関数とDROP関数は、いずれも配列(範囲)を指定し、そこから一部の要素を取得または除外するための関数です。これらの関数は、動的な配列を返すため、後続の関数と組み合わせて使用することで、より高度なデータ操作が可能になります。Excel 2021以前のバージョンでは利用できないため、Microsoft 365のサブスクリプションが必要です。

TAKE関数は、配列の「先頭」から指定した数だけ要素を取り出します。例えば、5行5列のデータから先頭の3行だけを取り出したい場合などに使用します。DROP関数は、TAKE関数とは逆に、配列の「先頭」から指定した数だけ要素を「除外」した残りの部分を返します。例えば、表のヘッダー行を除外したい場合などに便利です。

お探しの解決策が見つからない場合は、こちらの「Excelトラブル完全解決データベース」で他のエラー原因や解決策をチェックしてみてください。

TAKE関数による先頭データの取得方法

TAKE関数は、配列の先頭から指定した行数または列数を取得します。基本的な構文は以下の通りです。

TAKE(配列, [行数], [列数])

  • 配列: 対象となるデータ範囲を指定します。
  • 行数: 取得したい先頭の行数を指定します。省略すると全ての行が対象になります。正の数で行数を指定すると先頭から、負の数で行数を指定すると末尾から取得します。
  • 列数: 取得したい先頭の列数を指定します。省略すると全ての列が対象になります。正の数で列数を指定すると先頭から、負の数で列数を指定すると末尾から取得します。

例えば、A1:C10の範囲から先頭の3行を取得するには、次のように記述します。

  1. TAKE関数を入力する
    結果を表示したいセルを選択し、「=TAKE(」と入力します。
  2. 配列を指定する
    A1:C10の範囲を選択または入力します。数式は「=TAKE(A1:C10,」となります。
  3. 行数を指定する
    先頭から3行取得したいので、「3」と入力します。数式は「=TAKE(A1:C10,3,」となります。
  4. 列数を指定する(任意)
    全ての列を取得したい場合は、列数を省略するか、「3」と入力します。ここでは省略します。数式は「=TAKE(A1:C10,3)」となります。
  5. Enterキーで確定する
    数式が確定され、A1:C3の範囲のデータが自動的に表示されます。

末尾から2行を取得したい場合は、行数に「-2」を指定します。例えば、A1:C10の範囲から末尾の2行を取得するには、「=TAKE(A1:C10,-2)」と記述します。

DROP関数による末尾データの除外方法

DROP関数は、配列の先頭から指定した行数または列数を除外した残りの配列を返します。構文はTAKE関数と似ています。

DROP(配列, [行数], [列数])

  • 配列: 対象となるデータ範囲を指定します。
  • 行数: 除外したい先頭の行数を指定します。正の数で行数を指定すると先頭から、負の数で行数を指定すると末尾から除外します。
  • 列数: 除外したい先頭の列数を指定します。正の数で列数を指定すると先頭から、負の数で列数を指定すると末尾から除外します。

例えば、A1:C10の範囲から先頭の2行を除外したい場合は、次のように記述します。

  1. DROP関数を入力する
    結果を表示したいセルを選択し、「=DROP(」と入力します。
  2. 配列を指定する
    A1:C10の範囲を選択または入力します。数式は「=DROP(A1:C10,」となります。
  3. 行数を指定する
    先頭から2行除外したいので、「2」と入力します。数式は「=DROP(A1:C10,2,」となります。
  4. 列数を指定する(任意)
    全ての列を残したい場合は、列数を省略します。数式は「=DROP(A1:C10,2)」となります。
  5. Enterキーで確定する
    数式が確定され、A3:C10の範囲のデータが自動的に表示されます。

末尾から1行除外したい場合は、行数に「-1」を指定します。例えば、A1:C10の範囲から末尾の1行を除外するには、「=DROP(A1:C10,-1)」と記述します。

ADVERTISEMENT

TAKE関数とDROP関数を組み合わせた応用例

TAKE関数とDROP関数は、単独でも便利ですが、組み合わせることでさらに柔軟なデータ操作が可能になります。例えば、表のヘッダー行を除外し、その中からさらに先頭の数行だけを取り出すといった操作が容易になります。

例1: ヘッダーを除外し、先頭3行を表示する

A1:C10の範囲にデータがあり、A1:C1がヘッダー行だとします。ヘッダーを除外し、その下のデータから先頭3行を表示したい場合、DROP関数でヘッダーを除外し、その結果をTAKE関数で処理します。

  1. DROP関数でヘッダーを除外する
    まず、A1:C10の範囲から先頭の1行(ヘッダー)を除外します。数式は「=DROP(A1:C10,1)」となります。
  2. TAKE関数で結果の先頭3行を取得する
    DROP関数の結果(A2:C10の範囲に相当)から、さらに先頭3行を取得します。数式は「=TAKE(DROP(A1:C10,1),3)」となります。
  3. Enterキーで確定する
    この数式により、元のデータ範囲からヘッダーを除いた後、その中の先頭3行が抽出されます。

例2: 末尾の不要な行を除外し、残りのデータを表示する

A1:C10の範囲にデータがあり、末尾に集計行などが含まれているとします。末尾の2行を除外して、それより上のデータだけを表示したい場合、DROP関数で末尾の行を除外します。

  1. DROP関数で末尾の行を除外する
    A1:C10の範囲から末尾の2行を除外するには、行数に「-2」を指定します。数式は「=DROP(A1:C10,-2)」となります。
  2. Enterキーで確定する
    この数式により、A1:C8の範囲のデータが表示されます。

例3: 特定の範囲(例: 2行目から5行目まで)を取得する

TAKE関数とDROP関数を組み合わせることで、特定の開始行から終了行までの範囲を取得することも可能です。例えば、A1:C10の範囲から2行目から5行目までを取得したい場合、以下の手順で行います。

  1. 末尾の行を除外する
    まず、A1:C10の範囲から、不要な末尾の行を除外します。5行目までを残したいので、末尾から4行(10 – 5 = 4)を除外します。数式は「=DROP(A1:C10,-4)」となります。
  2. 結果から先頭の行数を指定する
    次に、上記の結果(A1:C5の範囲に相当)から、取得したい開始行(この場合は2行目)までの行数分だけ取得します。2行目から5行目までなので、4行(5 – 2 + 1 = 4)を取得します。数式は「=TAKE(DROP(A1:C10,-4),4)」となります。
  3. Enterキーで確定する
    この数式により、A2:C5の範囲のデータが抽出されます。

このように、TAKE関数とDROP関数を組み合わせることで、従来はOFFSET関数やINDEX関数などで複雑に記述していた範囲指定を、より直感的かつ簡潔に記述できるようになります。

TAKE関数とDROP関数利用時の注意点と制限事項

TAKE関数とDROP関数は非常に便利ですが、利用する際にはいくつか注意すべき点や制限事項があります。

Microsoft 365限定の関数であること

TAKE関数とDROP関数は、Microsoft 365のサブスクリプション版Excelでのみ利用可能です。Excel 2019、Excel 2016などの永続ライセンス版や、それ以前のバージョンではこれらの関数はサポートされていません。これらのバージョンでファイルを開くと、数式がエラーになるか、正しく計算されない可能性があります。関数を使用する際は、利用者のExcelバージョンを確認することが重要です。

行数・列数の指定方法

TAKE関数とDROP関数では、行数や列数に正の数と負の数を指定できます。正の数は配列の先頭から、負の数は配列の末尾から対象となります。この仕様を理解していないと、意図しない範囲のデータが取得されたり、除外されたりする可能性があります。例えば、「末尾から3行取得したい」場合は、TAKE関数で「-3」と指定する必要があります。

配列のサイズを超える指定

指定する行数または列数が、対象となる配列のサイズを超えた場合、TAKE関数は配列全体を返します。一方、DROP関数は空の配列を返します。例えば、5行の配列に対してTAKE関数で7行を指定しても、エラーにはならず5行全てが返されます。しかし、DROP関数で5行の配列から7行を除外しようとすると、何も返されなくなります。この挙動を理解しておくことで、予期せぬ結果を防ぐことができます。

動的配列の特性

TAKE関数とDROP関数は動的配列を返します。これは、関数の結果が自動的に隣接するセルに展開される(スピルする)ことを意味します。もし、結果が表示されるはずのセル範囲に既にデータが存在する場合、スピルエラー(#SPILL!エラー)が発生します。このエラーが発生した場合は、結果が表示される範囲に他のデータがないか確認し、必要であればデータを移動させるか、範囲をクリアしてください。

空のデータ範囲の扱い

対象となる配列が空の場合、TAKE関数とDROP関数は空の配列を返します。これは期待される動作ですが、後続の処理でエラーが発生しないように、必要に応じてIFERROR関数などでエラーハンドリングを行うことが推奨されます。

TAKE関数とDROP関数をVBAで利用する場合

VBA(Visual Basic for Applications)からTAKE関数やDROP関数を利用することも可能です。これにより、マクロ内で動的にデータ範囲を操作することが可能になります。例えば、シート上の特定の範囲から先頭のN行を取得して処理したい場合などに役立ちます。

VBAでこれらの関数を使用するには、`WorksheetFunction`オブジェクトを介して呼び出す方法があります。ただし、動的配列を返す関数(TAKE, DROP, FILTER, SORTなど)は、VBAから直接呼び出す際に注意が必要です。これらの関数は、Excelの新しい配列数式エンジンによって処理されるため、VBAの標準的な機能では扱いにくい場合があります。

より確実な方法は、Excelの数式バーでこれらの関数を使用し、その結果(スピルされた配列)をVBAで取得するというアプローチです。

例として、セルA1に「=TAKE(Sheet1!A1:C10,3)」という数式が入力されている場合、VBAでその結果を取得するには以下のように記述できます。

VBAコード例:


Sub GetTakeFunctionResult()
    Dim resultRange As Range
    On Error Resume Next ' スピルエラーが発生した場合に備える
    Set resultRange = Range("A1").Value ' セルA1に入力された数式の結果を取得
    On Error GoTo 0

    If Not resultRange Is Nothing Then
        ' 取得した配列(Rangeオブジェクト)を処理する
        MsgBox "取得したデータは " & resultRange.Rows.Count & " 行 " & resultRange.Columns.Count & " 列です。"
        ' 例: 取得したデータを別のシートにコピーする
        ' resultRange.Copy Destination:=Sheets("Sheet2").Range("A1") 
    Else
        MsgBox "数式の結果を取得できませんでした。スピルエラーの可能性があります。"
    End If
End Sub

このコードは、セルA1に設定されたTAKE関数の結果を`Range`オブジェクトとして取得しようとします。`On Error Resume Next`は、もしスピルエラーなどで結果が取得できなかった場合にも処理を続行させるためのものです。

TAKE関数やDROP関数をVBAから直接配列として操作したい場合は、`Evaluate`メソッドを使用することも考えられますが、動的配列の扱いは複雑になりがちです。通常は、Excelのシート上でこれらの関数を数式として使用し、その結果をVBAで参照・操作する方がシンプルで確実な場合が多いでしょう。

また、TAKE関数やDROP関数は、WebクエリやPower Queryなど、他のデータ取得・変換機能と組み合わせて使用することで、より高度なデータ分析ワークフローを構築することも可能です。例えば、Webから取得した大量のデータから、先頭の一定期間のデータだけをTAKE関数で抽出し、それを分析対象とする、といった使い方が考えられます。

TAKE関数とDROP関数による範囲操作の比較

TAKE関数とDROP関数は、データの先頭・末尾の範囲を操作するという点で似ていますが、その役割は明確に異なります。以下に、それぞれの関数がどのような操作に適しているかをまとめます。

項目 TAKE関数 DROP関数
主な目的 先頭から指定した範囲のデータを「取得」する 先頭から指定した範囲のデータを「除外」する
返り値 指定した行数・列数の配列 除外した残りの配列
利用シーン例1 最新N件のデータを表示したい ヘッダー行を除外してデータ本体のみを表示したい
利用シーン例2 表の先頭からN列だけを分析したい 集計行などを除外して、本来のデータ範囲だけを使いたい
行数・列数指定 正: 先頭から取得。負: 末尾から取得。 正: 先頭から除外。負: 末尾から除外。
組み合わせ DROP関数と組み合わせ、末尾除外後のデータをTAKEで取得 TAKE関数と組み合わせ、先頭除外後のデータをTAKEで取得

TAKE関数は、例えば「最新の5件の売上データ」「直近3ヶ月のアクセスログ」など、常に最新または初期のデータ群を取得したい場合に有効です。一方、DROP関数は、表の先頭にあるタイトル行や、末尾にある合計行・平均行などを除外したい場合に適しています。これらの関数を適切に使い分けることで、Excelでのデータ抽出・集計作業をより効率的かつ正確に行うことができます。

まとめ

TAKE関数とDROP関数は、Microsoft 365版Excelで利用できる強力な配列関数です。これらの関数を用いることで、データの先頭から指定した行数・列数を取得したり、逆に先頭から指定した範囲を除外したりする操作が、従来よりもはるかにシンプルに記述できるようになりました。複雑なOFFSET関数やINDEX関数の組み合わせから解放され、数式の可読性と保守性が向上します。

本記事では、TAKE関数とDROP関数の基本的な使い方、組み合わせた応用例、そして利用上の注意点について解説しました。これらの関数をマスターすることで、Excelでのデータ分析やレポート作成の効率を飛躍的に高めることができます。ぜひ、ご自身の業務でこれらの関数を活用し、データ操作の簡略化を体験してみてください。

さらに、TAKE関数やDROP関数は、FILTER関数やSORT関数といった他の動的配列関数と組み合わせることで、より高度なデータ抽出・加工処理を実現できます。これらの関数群を使いこなすことで、Excelでのデータ活用能力を一段と向上させることができるでしょう。

📊
Excelトラブル完全解決データベースこの記事以外にも、様々なエラー解決策をまとめています。困った時の逆引きに活用してください。

ADVERTISEMENT

この記事の監修者
📈

超解決 Excel・Word研究班

企業のDX支援や業務効率化を専門とする技術者チーム。20年以上のExcel・Word運用改善実績に基づき、不具合の根本原因と最短の解決策を監修しています。ExcelとWordを使った「やりたいこと」「困っていること」「より便利な使い方」をクライアントの視点で丁寧に提供します。

🏆
超解決 Excel検定 あなたのExcel実務能力を3分で測定!【1級・2級・3級】