「特定の列だけ抽出して別のシートに貼りたい」「大きなデータ範囲から先頭3行だけ取り出したい」――そうした配列・範囲の切り取り・整形をVBAなしで実現するのが、Excel 365で追加された5つの動的配列関数です。CHOOSECOLS・CHOOSEROWS・DROP・TAKE・EXPANDを組み合わせると、元のデータを一切書き換えずに必要な形に切り出した結果をスピルで展開できます。
これらの関数はExcel 365(Microsoft 365版Excel)で利用でき、FILTER・UNIQUE・SORT・VSTACK・HSTACKと組み合わせることで複雑なデータ変換パイプラインを数式だけで構築できます。MOS Excel 365 エキスパート(MO-211)の「高度な機能を使用した数式およびマクロの作成」の出題範囲にも含まれます。
本記事では、5関数それぞれの構文と引数の意味を丁寧に解説し、業務でそのまま使える実務パターンとMOS試験の対策ポイントを体系的に紹介します。
5関数の役割と早見表
まず5関数の違いを整理します。いずれも「配列(またはセル範囲)を受け取り、加工した配列をスピルで返す」関数です。
| 関数 | 役割 | 典型的な用途 |
|---|---|---|
| CHOOSECOLS | 指定した列番号の列だけを取り出す | 必要な列だけ別シートに展開・レポート用に列を並べ替え |
| CHOOSEROWS | 指定した行番号の行だけを取り出す | 先頭行・末尾行の抽出・特定行のピックアップ |
| DROP | 先頭(または末尾)から指定した行・列を除去する | ヘッダー行除外・最終行の合計行を除いた明細だけを取得 |
| TAKE | 先頭(または末尾)から指定した行・列だけを残す | 上位N件の抽出・直近N週分のデータ取得 |
| EXPAND | 配列を指定サイズに拡張し、余白を埋める | 可変長配列を固定サイズにそろえてVSTACKで縦結合 |
CHOOSECOLS関数:必要な列だけを取り出す
構文
=CHOOSECOLS(配列, 列番号1, [列番号2], ...)
| 引数 | 説明 | 値の形式 |
|---|---|---|
| 配列 | 対象のセル範囲または配列 | 必須 |
| 列番号1 | 取り出す列の番号(1が左端) | 必須・整数 |
| 列番号2以降 | 追加で取り出す列の番号 | 省略可・複数指定可 |
負の列番号を指定すると右端から数えます。-1で最右列、-2で右から2列目になります。同じ列番号を複数回指定すると、その列が複数回出力される(列の複製)ことも可能です。
基本例
' A1:E100の範囲から1列目(A)と3列目(C)だけ取り出す
=CHOOSECOLS(A1:E100, 1, 3)
' 右端列と左端列をこの順に並べて取り出す(列順の入れ替え)
=CHOOSECOLS(A1:E100, 5, 1)
' 負の列番号で右から2列目と右端列を取り出す
=CHOOSECOLS(A1:E100, -2, -1)
実務パターン:レポート用に必要列だけ展開する
元の管理表(A:G列に7項目)から、レポートに必要な「日付・顧客名・金額」の3列だけを別シートに展開する例です。
' 元データ:A=日付, B=受注番号, C=顧客名, D=担当者, E=商品, F=数量, G=金額
' レポートシートに日付(1列目)・顧客名(3列目)・金額(7列目)を展開
=CHOOSECOLS(元データ!A2:G100, 1, 3, 7)
元データを変更しても結果が自動更新され、列のコピー・貼り付けによる管理が不要になります。
CHOOSEROWS関数:必要な行だけを取り出す
構文
=CHOOSEROWS(配列, 行番号1, [行番号2], ...)
| 引数 | 説明 | 備考 |
|---|---|---|
| 配列 | 対象のセル範囲または配列 | 必須 |
| 行番号1 | 取り出す行の番号(1が先頭行) | 必須・整数 |
| 行番号2以降 | 追加で取り出す行の番号 | 省略可・複数指定可 |
CHOOSECOLSと同様に、負の行番号は末尾から数えます(-1が最終行)。行番号を明示的にリストアップするため、フィルタ条件を設定しにくい「非連続な行の抽出」に特に有効です。
基本例
' A1:D10の範囲から1行目・3行目・5行目だけを取り出す
=CHOOSEROWS(A1:D10, 1, 3, 5)
' 最終行(-1)と末尾から2行目(-2)を取り出す(最新2件の逆順取得)
=CHOOSEROWS(A1:D50, -1, -2)
' 先頭行と最終行だけを取り出す(ヘッダー行と合計行の比較)
=CHOOSEROWS(A1:D20, 1, -1)
実務パターン:月末最終週の5営業日データを抽出する
' 月別データ(A1:G25に約25行)の末尾5行をレポート用に取り出す
=CHOOSEROWS(A2:G25, -5, -4, -3, -2, -1)
' または TAKE関数(後述)で末尾5行をまとめて取得する方がシンプル
=TAKE(A2:G25, -5)
DROP関数:先頭・末尾の不要な行・列を除去する
構文
=DROP(配列, 行数, [列数])
| 引数 | 説明 | 備考 |
|---|---|---|
| 配列 | 対象のセル範囲または配列 | 必須 |
| 行数 | 先頭から除去する行数(負で末尾から除去) | 必須・0で行は除去しない |
| 列数 | 先頭から除去する列数(負で末尾から除去) | 省略可 |
「正の数 = 先頭から除去」「負の数 = 末尾から除去」が基本ルールです。行と列を同時に指定することで、四隅を削った内部データだけを取り出すことも可能です。
基本例
' 先頭1行(ヘッダー行)を除いた明細だけを取得
=DROP(A1:F100, 1)
' 末尾1行(合計行)を除いた明細だけを取得
=DROP(A1:F100, -1)
' 先頭1行と末尾1行の両方を除去(ヘッダーと合計行を外した純粋な明細)
' ※ DROP を入れ子にする
=DROP(DROP(A1:F100, 1), -1)
' 先頭2行(ヘッダー+小計行)と先頭1列(連番)を同時に除去
=DROP(A1:G100, 2, 1)
実務パターン:Excelエクスポートデータの前処理
基幹システムからエクスポートしたCSVをExcelで開いたとき、先頭3行が説明文・末尾2行が合計行になっているケースがあります。
' 生データ:A1:H120(先頭3行が説明・末尾2行が合計)
' 中間の明細だけ(4行目から118行目)を取り出す
=DROP(DROP(A1:H120, 3), -2)
' 左端の連番列(A列)も不要なので列も除去
=DROP(DROP(A1:H120, 3), -2) ' ← さらに CHOOSECOLS や DROP(, 0, 1) で列も除去可
TAKE関数:先頭・末尾から必要な行・列だけを残す
構文
=TAKE(配列, 行数, [列数])
| 引数 | 説明 | 備考 |
|---|---|---|
| 配列 | 対象のセル範囲または配列 | 必須 |
| 行数 | 先頭から残す行数(負で末尾から残す) | 必須・0はエラー |
| 列数 | 先頭から残す列数(負で末尾から残す) | 省略可 |
TAKEはDROPの「逆」の発想です。DROPが「何行削るか」を指定するのに対して、TAKEは「何行残すか」を指定します。どちらを使うかは「除去する行数と残す行数のどちらが小さいか」で選ぶと数式がシンプルになります。
基本例
' 先頭5行だけを取得(TOP5 レコード)
=TAKE(A2:F100, 5)
' 末尾3行を取得(最新3件)
=TAKE(A2:F100, -3)
' 先頭10行・左2列だけを取得(サマリー用切り出し)
=TAKE(A2:F100, 10, 2)
' SORT と組み合わせて上位5件を自動抽出
=TAKE(SORT(A2:F100, 4, -1), 5) ' 4列目(金額)降順で並べ替えたうえで先頭5件
DROP vs TAKE の使い分け早見表
| 目的 | 適した関数 | 数式例 |
|---|---|---|
| 先頭1行(ヘッダー)を除く | DROP | =DROP(A1:D100, 1) |
| 先頭N行だけ取得(上位N件) | TAKE | =TAKE(A2:D100, 5) |
| 末尾N行だけ取得(最新N件) | TAKE | =TAKE(A2:D100, -5) |
| 末尾1行(合計行)を除く | DROP | =DROP(A1:D100, -1) |
| 中間N行だけ取得 | DROP+DROP | =DROP(DROP(A1:D100, 開始行-1), -(末尾除去行数)) |
EXPAND関数:配列を固定サイズに拡張する
構文
=EXPAND(配列, 行数, [列数], [埋め込み値])
| 引数 | 説明 | 備考 |
|---|---|---|
| 配列 | 拡張する元の配列 | 必須 |
| 行数 | 結果の行数(元の行数以上) | 必須 |
| 列数 | 結果の列数(元の列数以上) | 省略可 |
| 埋め込み値 | 追加された余白セルに入る値 | 省略時は #N/A |
EXPANDは主に「可変長の配列を固定サイズにそろえてから他の関数に渡す」場面で使います。VSTACK・HSTACKで複数の配列を縦横結合する際に配列サイズが不一致のときも活躍します。
基本例
' A1:C3(3行3列)を5行4列に拡張し、余白を0で埋める
=EXPAND(A1:C3, 5, 4, 0)
' 余白を空文字("")で埋めて #N/A を回避する
=EXPAND(A1:C3, 5, 4, "")
' 可変サイズのFILTER結果を固定10行にそろえてからVSTACKで縦結合
=VSTACK(
EXPAND(FILTER(A2:D100, E2:E100="東京"), 10, 4, ""),
EXPAND(FILTER(A2:D100, E2:E100="大阪"), 10, 4, "")
)
5関数の組み合わせ:実務シナリオ別パターン
シナリオ1:月次レポート用に「特定列の上位10件」を自動展開
全店舗の売上データから「日付・店舗名・売上金額」の3列を取り出し、金額降順の上位10件をレポートシートに展開します。
' 元データ:A=日付, B=店舗コード, C=店舗名, D=担当者, E=売上金額
' 手順: ①SORT(E列降順)→ ②TAKE(上位10行)→ ③CHOOSECOLS(A, C, E列)
=CHOOSECOLS(
TAKE(SORT(A2:E200, 5, -1), 10),
1, 3, 5
)
シナリオ2:複数シートの週次データを1枚のダッシュボードに集約
週ごとに別シートにあるデータ(行数が異なる)を固定20行にそろえてからVSTACKで縦結合し、統合ビューを作成します。
' 各週のデータのヘッダー行(1行目)をDROPで除去してから20行にEXPAND
=VSTACK(
EXPAND(DROP(第1週!A1:D30, 1), 20, 4, ""),
EXPAND(DROP(第2週!A1:D25, 1), 20, 4, ""),
EXPAND(DROP(第3週!A1:D35, 1), 20, 4, "")
)
シナリオ3:基幹システムエクスポートの前処理自動化
「先頭2行がシステムヘッダー・末尾1行が合計行・左端2列が内部コード」という形式のエクスポートデータから、実務で必要な明細データだけを取り出します。
' 元データ:A1:J120(先頭2行=システムヘッダー, 末尾1行=合計, 左2列=内部コード)
' ①先頭2行除去 → ②末尾1行除去 → ③左2列除去
=DROP(
DROP(
DROP(A1:J120, 2),
-1
),
0, 2
)
シナリオ4:列の順序を並べ替えてレポートテンプレートに合わせる
テンプレート側の列順と元データの列順が異なる場合、COPYペーストや手動並べ替えなしに対応できます。
' 元データ列順:A=ID, B=日付, C=金額, D=担当者, E=メモ
' テンプレート要求列順:日付→担当者→金額(B, D, C の順)
=CHOOSECOLS(A2:E100, 2, 4, 3)
よくあるエラーと対処法
| エラー | 原因 | 対処法 |
|---|---|---|
| #VALUE! | 列番号・行番号に0または小数点が含まれている | 整数のみ指定。0は許容されないためCHOOSECOLSは1以上の整数で指定する |
| #NUM! | 指定した列番号が配列の列数を超えている | 元の配列の列数を確認。CHOOSECOLSで5列しかない配列に6を指定するとエラー |
| #N/A | EXPANDの余白(埋め込み値を省略した場合のデフォルト) | 第4引数に0または””を指定して#N/Aを回避する |
| #SPILL! | スピル先にデータがある | スピル先セル範囲を空にする。スピルの邪魔になっているセルを移動・削除する |
| #CALC! | DROPまたはTAKEで除去後に行・列が0になる | 除去行数が配列の行数以上にならないよう調整する |
MOS Excel 365 エキスパート(MO-211)での出題ポイント
CHOOSECOLS・CHOOSEROWS・DROP・TAKE・EXPANDは、MOS Excel 365 エキスパート(MO-211)の「高度な機能を使用した数式およびマクロの作成」の出題範囲に含まれます。試験では、問題文で指示された操作をExcel上で実際に数式として入力する形式が中心です。
- 構文の正確な入力:引数の順序(TAKE/DROPは「行数→列数」の順)と、正・負の値の意味(正=先頭から・負=末尾から)を確実に把握しておく
- スピルの動作確認:数式を入力するセルの隣接セルが空であることを事前に確認し、#SPILL!エラーを避ける
- 他の動的配列関数との組み合わせ:FILTERやSORT、VSTACKなどと組み合わせた複合数式の入力が設問になることがある
- 負の行番号・列番号の扱い:「末尾から3行を取得せよ」という設問でTAKE(範囲, -3) と正しく入力できるかが問われる
- EXPANDの埋め込み値指定:余白に0や空文字を入れる指定が問題文に記載されていることがある。引数の省略と明示の違いを理解しておく
MOS試験 配列加工関数チェックリスト
| 確認ポイント | 操作内容 | 難易度 |
|---|---|---|
| CHOOSECOLSで特定列を取り出す | =CHOOSECOLS(範囲, 列番号) を正確に入力できる | ★☆☆ |
| 負の列番号で末尾から取り出す | -1(最終列)・-2(右から2列目)の意味を把握して入力できる | ★★☆ |
| DROPでヘッダー行を除去する | =DROP(範囲, 1) が先頭1行を除去することを理解している | ★☆☆ |
| TAKEで上位N件を取得する | =TAKE(範囲, N) で先頭N行、=TAKE(範囲, -N) で末尾N行を取れることを理解している | ★★☆ |
| EXPANDで余白を任意値で埋める | =EXPAND(配列, 行数, 列数, 埋め込み値) の第4引数を指定できる | ★★★ |
| SORT・FILTERとの組み合わせ | TAKE(SORT(範囲, 列, -1), N) で「降順上位N件」を取り出せる | ★★★ |
まとめ:5関数の使い分けと組み合わせのポイント
本記事のポイントをまとめます。
- CHOOSECOLS・CHOOSEROWSは「ピックアップ」の関数。取り出したい列・行の番号を列挙することで、非連続な選択や列順の入れ替えも1つの数式で実現できる
- DROP・TAKEは「切り取り」の関数。正の数で先頭から・負の数で末尾からという共通ルールを覚えておくと、どちらを使うかの判断が速くなる
- EXPANDは「サイズ合わせ」の関数。VSTACK・HSTACKで可変長配列を縦横結合するときの前処理として使うのが主な用途
- 組み合わせの基本:SORT→TAKE(上位N件)、DROP→DROP(中間行抽出)、FILTER→EXPAND→VSTACK(複数条件の縦結合)が典型パターン
- スピルの注意点:結果が展開されるセル範囲を空にしておかないと#SPILL!エラーになる。結果サイズを事前に見積もってスペースを確保する
- MOS試験対策の核心:各関数の引数の意味・正負の動作・他の動的配列関数との組み合わせパターンを手を動かして練習することが最短経路
CHOOSECOLS・CHOOSEROWS・DROP・TAKEをマスターすると、「データの切り出し・列の整形・上位N件抽出」という業務でよくある操作をVBAなしの数式だけで自動化できます。EXPANDと組み合わせれば可変長データの定型化も可能です。いずれもスピルで動的に結果を更新するため、元データを変更するたびに出力も自動で更新されます。
PR
CHOOSECOLS・DROP・TAKEなどExcel 365の最新動的配列関数を含む関数リファレンスとして最適な一冊。実際の業務シナリオに沿った使い方が豊富に掲載されており、本記事で学んだ5関数の理解をさらに深められます。
PR
最新の動的配列関数を含むExcel関数の時短活用パターンが体系的に整理された実務書。SORT・FILTER・TAKE・CHOOSECOLSを組み合わせたデータ加工の応用パターンを網羅しており、エキスパート試験の準備にも役立ちます。
