スプレッドシートで表を加工するとき、先頭のヘッダー行や末尾の合計行を除外したいことってありますよね。手作業で削除すると元データまで消えてしまうし、毎回範囲を調整するのも面倒です。
DROP関数を使えば、配列の先頭や末尾から指定した数の行・列を削除して、残りのデータだけを取り出せます。元データはそのまま残るので安心です。
この記事では、DROP関数の基本的な使い方から、FILTER関数との組み合わせ、TAKE関数との違いまでわかりやすく解説します。
スプレッドシートのDROP関数とは?
DROP関数(読み方: ドロップ関数)は、配列やセル範囲から先頭または末尾の行・列を削除して、残りのデータを返す関数です。「Drop(落とす・除外する)」が名前の由来です。
たとえば、10行のデータから先頭2行を削除して残り8行だけを取り出すことができます。元データと数式でつながっているため、元データが更新されれば結果も自動で反映されますよ。
DROP関数にできることをまとめると、次のとおりです。
- 配列の先頭からN行を削除する(正の数を指定)
- 配列の末尾からN行を削除する(負の数を指定)
- 列方向の削除もできる(第3引数を使用)
- 行と列を同時に削除することもできる
NOTE
DROP関数はGoogleスプレッドシート独自の関数ではなく、ExcelのMicrosoft 365やExcel 2024でも使用できます。ただし、Excel 2021以前のバージョンでは使えません。
DROP関数の基本構文
=DROP(配列, 行数, [列数])
カッコの中に、対象の範囲と削除する行数・列数を指定します。
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 配列 | 必須 | 削除対象のセル範囲または配列 |
| 行数 | 必須 | 削除する行数。正の数で先頭から、負の数で末尾から削除 |
| 列数 | 任意 | 削除する列数。正の数で左から、負の数で右から削除 |
第2引数(行数)の符号で削除方向が決まります。正の数なら先頭から、負の数なら末尾から削除します。第3引数(列数)も同じルールです。行の削除をスキップして列だけ削除したい場合は、行数に0を指定してくださいね。
DROP関数の基本的な使い方
ここでは、売上データからDROP関数で行や列を削除する例を紹介します。
サンプルデータ
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 |
先頭の行を削除する
ヘッダー行(1行目)を削除して、データ部分だけを取り出します。出力先のセル(たとえばF1)に以下の数式を入力して、Enterを押します。
=DROP(A1:D7, 1)
| F | G | H | I | |
|---|---|---|---|---|
| 1 | 4/1 | 佐藤 | 商品A | 50,000 |
| 2 | 4/2 | 田中 | 商品B | 30,000 |
| 3 | 4/3 | 鈴木 | 商品C | 45,000 |
| 4 | 4/4 | 高橋 | 商品A | 60,000 |
| 5 | 4/5 | 伊藤 | 商品B | 35,000 |
| 6 | 4/6 | 佐藤 | 商品C | 55,000 |
第2引数に「1」を指定したので、先頭1行(ヘッダー行)が削除され、データ部分だけが出力されました。「2」にすれば先頭2行が削除されます。
末尾の行を削除する
末尾から削除するには、第2引数に負の数を指定します。
=DROP(A1:D7, -2)
| F | G | H | I | |
|---|---|---|---|---|
| 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 |
「-2」を指定したので、末尾2行(5行目・6行目のデータ)が削除されました。合計行や集計行を除外したいときに便利ですよ。
列を削除する
列方向の削除には第3引数を使います。行の削除をスキップするには、行数に0を指定します。
=DROP(A1:D7, 0, 1)
| F | G | H | |
|---|---|---|---|
| 1 | 担当者 | 商品 | 売上 |
| 2 | 佐藤 | 商品A | 50,000 |
| 3 | 田中 | 商品B | 30,000 |
| 4 | 鈴木 | 商品C | 45,000 |
| 5 | 高橋 | 商品A | 60,000 |
| 6 | 伊藤 | 商品B | 35,000 |
| 7 | 佐藤 | 商品C | 55,000 |
行数を0にして列数を1に指定したので、左端1列(日付列)だけが削除されました。右端から削除したい場合は「-1」のように負の数を使います。
行と列を同時に削除する
行と列を同時に削除することもできます。
=DROP(A1:D7, 1, 1)
先頭1行(ヘッダー)と左端1列(日付)を同時に削除します。ヘッダーと不要な列をまとめて除去したいときに、1つの数式で済むので効率的ですよ。
DROP関数の実務活用パターン
パターン1: FILTER結果からヘッダー行を除去する
FILTER関数で列全体を対象にフィルターをかけると、ヘッダー行まで結果に含まれてしまうことがあります。DROP関数で先頭1行を除去しましょう。
=DROP(FILTER(A:D, C:C="商品A"), 1)
FILTER関数の結果をそのままDROPに渡して、先頭1行(ヘッダー)を削除しています。数式もシンプルで読みやすいですよね。
パターン2: 集計行を除いてデータだけ取り出す
表の最終行に合計行がある場合、データ部分だけを取り出せます。
=DROP(A2:D8, -1)
末尾1行を削除するだけで、集計行を除いた純粋なデータが手に入ります。SORT関数やUNIQUE関数に渡す前処理として使うと、集計行が混ざる事故を防げますよ。
パターン3: 直近N件を除いた過去データを抽出する
売上データを日付の新しい順に並べ替えて、直近3件を除いた残りを取り出します。
=DROP(SORT(A2:D20, 1, FALSE), 3)
SORT関数で日付の降順に並べ替えたあと、DROPで先頭3行(直近3件)を削除しています。「並べ替えてから先頭を切る」という2ステップで考えるとわかりやすいです。
パターン4: DROP + TAKEで中間のデータだけ抽出する
先頭と末尾の両方を除外して、中間部分だけを取り出すことができます。
=TAKE(DROP(A2:D100, 10), 10)
先頭10行を削除したあと、そこから10行だけ取り出します。つまり11行目から20行目が返ります。ページネーションのように特定範囲のデータを取り出したいときに便利ですよ。
パターン5: VSTACK結合後にヘッダーの重複を除去する
VSTACK関数で複数の表を縦に結合すると、2つ目以降のヘッダーが重複することがあります。
=VSTACK(Sheet1!A1:D4, DROP(Sheet2!A1:D4, 1))
2つ目の表をDROPでヘッダー除去してからVSTACKに渡しています。結合前にヘッダーを落とすことで、きれいな一覧表が完成しますよ。
TAKE関数との違い・使い分け
DROP関数には、ペアとなるTAKE関数があります。どちらも配列のサイズを縮小する関数ですが、アプローチが正反対です。
| 比較項目 | DROP関数 | TAKE関数 |
|---|---|---|
| 動作 | 指定した行・列を削除して残りを返す | 指定した行・列を取り出して返す |
| 構文 | =DROP(配列, 行数, [列数]) | =TAKE(配列, 行数, [列数]) |
| 引数の構造 | 完全に同じ | 完全に同じ |
| 正の数の意味 | 先頭から削除 | 先頭から取得 |
| 負の数の意味 | 末尾から削除 | 末尾から取得 |
| 結果 | 指定した部分を除いた残り | 指定した部分だけ |
同じデータに対して、DROPとTAKEの結果を比べてみましょう。
=DROP(A1:A10, 3) → 4行目〜10行目が返る(先頭3行を削除)
=TAKE(A1:A10, 3) → 1行目〜3行目が返る(先頭3行を取得)
DROPが返す部分とTAKEが返す部分は、ちょうど補い合う関係です。元の配列をDROPの結果とTAKEの結果に分割しているイメージですね。
使い分けの目安は次のとおりです。
- ヘッダー行や合計行を除外したい → DROP関数(「不要な行を消す」が直感的)
- 上位N件だけ取り出したい → TAKE関数(「N件取る」が直感的)
- 中間レコードの抽出 → DROP + TAKEの組み合わせ
迷ったときは「自分がやりたい操作は消す?取る?」と考えてみてください。意図が伝わりやすい方を選ぶと、数式が読みやすくなりますよ。
よくあるエラーと対処法
DROP関数はシンプルですが、削除する行数の指定を間違えるとエラーになります。
| エラー | 原因 | 対処法 |
|---|---|---|
#CALC! | 削除する行数が配列の行数以上になった | 削除行数を配列の行数より小さくしてください |
#VALUE! | 行数・列数に数値以外(文字列など)を指定した | 引数が数値になっているか確認してください |
#REF! | 出力先のセルに既にデータがある | 出力先の範囲を空にしてください |
#NAME? | 関数名のスペルミス | 「DROP」のスペルを確認してください |
特に注意したいのが #CALC! エラーです。たとえば5行しかないデータに =DROP(A1:A5, 5) と指定すると、全行が削除されて結果が空になるためエラーが発生します。
削除前に行数を確認する方法で回避できます。
=IF(ROWS(A1:D10)>1, DROP(A1:D10, 1), A1:D10)
ROWS関数で行数を取得し、削除しても行が残る場合だけDROPを実行しています。
TIP
IFERRORで囲む方法もありますが、他のエラーまで隠してしまう点に注意してください。原因を特定しやすくするには、IF+ROWSの組み合わせがおすすめです。
まとめ
DROP関数は、配列から不要な行・列を削除して残りのデータを返す関数です。正の数で先頭から、負の数で末尾から削除できるシンプルな仕組みです。
この記事のポイントをおさらいしておきましょう。
- DROP関数は
=DROP(配列, 行数)で、先頭または末尾の行を削除する - 正の数で先頭から削除、負の数で末尾から削除。符号を変えるだけで方向が切り替わる
- 第3引数を指定すれば、列方向の削除や行と列の同時削除もできる
- FILTER関数のヘッダー除去や集計行の除外など、前処理として活躍する
- TAKE関数はペア関数で、「削除して残す」のがDROP、「指定した分だけ取り出す」のがTAKE
- 削除行数が配列の行数以上になると
#CALC!エラー。ROWS関数で事前チェックすると安全
まずは =DROP(A1:D10, 1) のヘッダー行削除から試してみてください。FILTER関数やSORT関数と組み合わせれば、データの前処理がグッと効率的になりますよ。
