表のデータから特定の列だけを別の場所に取り出したいとき、手作業でコピー&ペーストを繰り返していませんか?
「商品名と売上だけ抜き出したい」「列の順番を入れ替えて報告書を作りたい」――こうした作業は、対応するデータが100行・1000行と増えるほど、手作業では追いつかなくなります。
CHOOSECOLS関数を使えば、指定した列番号を入力するだけで、必要な列を自動的に取り出せます。複数列の同時取り出しや逆順指定、スピルによる結果の自動展開にも対応しており、データ加工の手間を大幅に削減できます。
この記事では、CHOOSECOLS関数の基本構文から、SORT・FILTER・HSTACKなど他関数との実務的な組み合わせ、よくあるエラーへの対処法、FAQまでまとめて解説します。
CHOOSECOLS関数とは
CHOOSECOLS関数は、配列またはセル範囲から「指定した列番号の列だけ」を取り出して返す関数です。Microsoft 365およびExcel 2021以降で使用できます。
読み方は「チューズ コラムズ(CHOOSE COLUMNS)」で、英語の「列を選ぶ」という意味そのままの関数名です。
CHOOSECOLS関数でできること
- 表の中から必要な列だけを抽出する
- 複数の列をまとめて取り出す
- 取り出す列の順番を自由に並べ替える
- 負の数を使って末尾から列を指定する
- スピルによって複数列の結果をワンクリックで展開する
スピル(自動展開)に対応しているため、結果が複数列にわたる場合でも1つの数式で処理できます。元データを変更せずに「ビューだけ作る」用途にぴったりの関数です。
こんな場面で活躍する
- 元データはそのまま残し、別シートに「必要な列だけのビュー」を作りたい
- 列順がバラバラの社内データを、報告フォーマットの順番に並べ替えたい
- 列数が変動する表で「常に最後の列」を取り出したい
- FILTERやSORTと組み合わせて、抽出と並べ替えと列選択を1つの数式にまとめたい
CHOOSECOLS関数の構文と引数
=CHOOSECOLS( 配列 , 列番号1 , [列番号2] , … )
| 引数 | 必須/省略 | 説明 |
|---|---|---|
| 配列 | 必須 | 列を取り出したい配列またはセル範囲 |
| 列番号1 | 必須 | 取り出す列の番号(1から始まる) |
| 列番号2以降 | 省略可 | 追加で取り出す列の番号(複数指定可) |
列番号の指定方法
- 正の数:先頭から数えた列番号(1=1列目、2=2列目)
- 負の数:末尾から数えた列番号(-1=最終列、-2=最終列から2番目)
- 複数指定:取り出したい順に列番号をカンマで区切る
- 同じ列の重複指定:同じ列番号を複数回指定して、同じ列を2度取り出すことも可能
列番号は必ず「整数」で指定します。小数や文字列を指定すると後述のエラーが返ります。
CHOOSECOLS関数の基本的な使い方
ここからは、シンプルなパターンから順に手を動かして確かめていきましょう。サンプル表は次のような構成を想定します。
| 列 | A | B | C | D | E |
|---|---|---|---|---|---|
| 内容 | 商品コード | 商品名 | 単価 | 数量 | 売上 |
1列だけ取り出す
A2:E10の範囲から3列目(単価)だけを取り出す例です。
=CHOOSECOLS(A2:E10, 3)
指定したセル範囲の3列目のデータが、数式を入力したセルからスピルして縦方向に表示されます。元の表に「単価」だけが並んだ縦長のリストができあがります。
複数列を同時に取り出す
A2:E10の範囲から2列目(商品名)と5列目(売上)を取り出す例です。
=CHOOSECOLS(A2:E10, 2, 5)
離れた位置にある「商品名」と「売上」を、間の列(単価・数量)を飛ばして一度に取り出せます。報告書用の縮約版データをサクッと作りたいときに重宝します。
列の順番を並べ替える
元の表の列順を変えて取り出したい場合も、列番号の順番を指定するだけです。
=CHOOSECOLS(A2:E10, 5, 2, 3, 4)
元が「商品コード・商品名・単価・数量・売上」の順でも、「売上・商品名・単価・数量」の順に並べ替えて取り出せます。レポート用フォーマットに合わせて列順を変えたいときに便利です。
末尾から列を指定する(負の数)
=CHOOSECOLS(A2:E10, -1)
-1 を指定すると最終列(売上)を取り出せます。-2 なら最終列の1つ手前(数量)。列数が増減する可能性がある表で「常に末尾の列」を参照したい場合に使うと、列の追加で数式が壊れません。
同じ列を複数回取り出す
=CHOOSECOLS(A2:E10, 2, 2, 2)
同じ列番号を繰り返し指定すると、同じ列を複数回並べて取り出せます。「商品名を3列ぶん並べたフォーマットに転記したい」といった特殊な要件に対応できます。
実務での活用例
活用例1:報告書用に必要な列だけ抽出する
販売管理表(商品コード・商品名・単価・数量・売上・担当者)から、報告書に必要な「商品名・売上・担当者」だけを取り出す場合:
=CHOOSECOLS(A2:F100, 2, 5, 6)
元のデータを変更せずに、報告書用のビューを別シートに作れます。元データを編集すれば抽出結果もリアルタイムに更新されるため、月次レポートのテンプレート化に向いています。
活用例2:SORT関数と組み合わせて並べ替えと列抽出を同時に行う
SORT関数と組み合わせると、必要な列を取り出しつつ売上順に並べ替えるといった処理を、1つの数式で完結できます。
=SORT(CHOOSECOLS(A2:E100, 2, 1, 4), 2, -1)
この数式は次のように動きます。
CHOOSECOLS(A2:E100, 2, 1, 4)で「2列目・1列目・4列目」を順に取り出すSORT(..., 2, -1)で結果の2列目(=元の1列目)を降順に並べる
「必要な列だけを選んで、特定の列で降順に並べる」という処理を、補助列なしで実現できます。
活用例3:FILTER関数と組み合わせて抽出と列選択をまとめる
FILTER関数と組み合わせると、「条件に合う行だけを取り出し、さらに必要な列だけに絞る」処理を1つの数式で書けます。
=CHOOSECOLS(FILTER(A2:F100, E2:E100>=10000), 2, 5, 6)
この例では、E列(売上)が10000以上の行だけをFILTERで抽出し、その結果から商品名・売上・担当者の3列だけをCHOOSECOLSで取り出しています。条件付き縮約レポートのテンプレートとして強力です。
活用例4:CHOOSEROWS関数と組み合わせて行と列を同時に指定する
CHOOSEROWS関数(行を選択する関数)と組み合わせると、必要な行と列を同時に抽出できます。
=CHOOSECOLS(CHOOSEROWS(A1:E20, 1, 3, 5), 2, 4)
この例では1・3・5行目から2・4列目だけを取り出しています。「サンプル行だけ抜き出してダッシュボード化したい」ときに便利です。
活用例5:HSTACK関数と組み合わせて列を結合する
別表の列同士を結合してから列順を整えたい場合は、HSTACKと組み合わせます。
=CHOOSECOLS(HSTACK(A2:A100, D2:D100, F2:F100), 3, 1, 2)
A列・D列・F列という離れた列を横に結合してから、CHOOSECOLSで並び順を「F → A → D」に変えています。複数シートのデータを1枚にまとめる作業で活躍します。
活用例6:常に最後の3列を取り出す
月次データのように、列が右に追加されていく表では、負の数指定が威力を発揮します。
=CHOOSECOLS(A2:Z100, -3, -2, -1)
「直近3か月分」を常に末尾の3列とみなして取り出せるため、列が追加されても数式を書き換える必要がありません。
よくあるエラーと対処法
| エラー | 原因 | 対処法 |
|---|---|---|
| #VALUE! | 列番号に小数や文字列を指定している | INT関数で整数化するか、整数を直接指定する |
| #VALUE! | 列番号に0を指定している | 1以上、または-1以下の整数を指定する |
| #REF! | 列番号が配列の列数を超えている | 配列の列数以内で指定する(COLUMNS関数で確認) |
| #NAME? | 関数名のスペルミスまたは非対応バージョン | Microsoft 365またはExcel 2021以降で使用する |
| #SPILL! | スピル先のセルにデータが入っている | スピル範囲を空にする |
| 結果が1列になる | 列番号を1つしか指定していない | 複数列を取り出すには列番号を複数指定する |
列数を確認しながら指定する
配列の列数が不明なときは、COLUMNS関数で列数を取得してから指定すると安全です。
=COLUMNS(A2:E100)
返ってきた数(5)以内の整数を列番号に指定すれば、#REF!エラーを防げます。
動的に末尾の列だけ取り出す
列数が変動する表では、負の数指定と組み合わせるか、-COLUMNS(範囲) のような相対指定で対応できます。
=CHOOSECOLS(A2:Z100, -1)
このように書いておけば、列が右に追加されても常に「最終列」を取り出せます。
CHOOSECOLSと似た関数との使い分け
| 関数 | 用途 | 使い分けのポイント |
|---|---|---|
| CHOOSECOLS | 配列から特定の列を選んで取り出す | 列番号で選びたい・列順を入れ替えたい |
| CHOOSEROWS | 配列から特定の行を選んで取り出す | 行番号で選びたい・行順を入れ替えたい |
| INDEX | 行と列の交差するセルや範囲を返す | 1セルだけ・行と列の両方を指定したい |
| FILTER | 条件に合う行または列を抽出する | 条件式で絞り込みたい |
| HSTACK | 複数の配列を横方向に結合する | 別表の列を1つにまとめたい |
| VSTACK | 複数の配列を縦方向に結合する | 別表の行を1つにまとめたい |
CHOOSECOLSは「列番号で選ぶ」発想、FILTERは「条件で絞る」発想、INDEXは「1点を取り出す」発想と覚えると使い分けが整理できます。
よくある質問(FAQ)
Q1. CHOOSECOLS関数はどのバージョンのExcelで使えますか?
A. Microsoft 365およびExcel 2021以降で使用できます。Excel 2019以前およびExcel for Mac 2019以前では使用できず、#NAME? エラーが返ります。Web版Excel・iPad版Excelの最新版でも使用可能です。
Q2. CHOOSECOLSとINDEXは何が違いますか?
A. CHOOSECOLSは「列単位で複数列を一気に取り出す」のが得意な関数です。一方、INDEXは「1セル単位の取得」または「1列・1行の取り出し」が基本です。複数列を順番を変えて取り出したい場合や、スピルで自動展開させたい場合はCHOOSECOLSが向いています。
Q3. CHOOSECOLSで0番目や存在しない列番号を指定するとどうなりますか?
A. 列番号に0を指定すると #VALUE!、列数を超える番号(例:5列の表に7を指定)や負の方向に超えた指定(例:5列の表に-7)を指定すると #REF! エラーが返ります。COLUMNS関数で列数を事前に確認しておくと事故を防げます。
Q4. 取り出した結果を値として固定したい場合はどうすればよいですか?
A. 数式を入力したセル範囲をコピーし、「貼り付けのオプション」→「値の貼り付け」を選択すれば、結果を値として固定できます。元データの変更を反映させたくない場合や、別ファイルに転記したい場合に使います。
Q5. CHOOSECOLSをスピルさせず、特定のセルだけに表示することはできますか?
A. CHOOSECOLSの結果は基本的にスピルしますが、INDEX(CHOOSECOLS(...), 行, 列) のようにINDEX関数で囲めば、1セルだけを取り出せます。また、=CHOOSECOLS(A2:E10, 2) のように1列分の指定でも、出力先が1セルしかない場合は #SPILL! エラーになるため、スピル先のセルを空けておくのが基本です。
まとめ
CHOOSECOLS関数は、配列から指定した列を自由に取り出せる関数です。
- 1列だけの抽出から複数列の同時取り出しまで対応
- 列の並べ替えや、同じ列の繰り返し指定も可能
- 負の数で末尾から列を指定できる(列数が変動する表で便利)
- SORT・FILTER・HSTACK・CHOOSEROWSと組み合わせれば、条件抽出・並べ替え・列結合を1つの数式で実現
- Microsoft 365・Excel 2021以降で使用可能
元のデータを変えずに必要な列だけを取り出してレポートを作りたい場面で活躍します。スピルを活用すれば、列の選択・並べ替え・抽出・結合をすべて関数1つで完結できるため、月次レポートやダッシュボード作成の効率が一気に上がります。
