「せっかくXLOOKUP関数を使いこなしてきたのに、取り出したい列が飛び飛びに散らばっていると途端に数式が複雑になって…」そんな悩み、実は私も最初にぶつかった壁です。20列以上ある大きな表から、必要な列だけをスッキリ取り出したい。でも列が連続していないから、数式がゴチャゴチャになってしまう。そんなあなたに、今日は「これを知っていたら毎日の作業が変わる!」というテクニックをお届けします。
- XLOOKUPとCHOOSECOLS関数を組み合わせると、連続しない列を1つの数式でまとめて取り出せる
- CHOOSECOLS関数は「表全体を部品として再利用する」発想で、列の並び替えや重複取得も自在にできる
- HSTACKとCHOOSECOLSの使い分けを知ることで、大規模な表管理が格段に楽になる
- まず知っておきたい!XLOOKUPとCHOOSECOLSが「最強コンビ」である理由
- CHOOSECOLS関数の基本的な使い方をマスターしよう!
- XLOOKUP×CHOOSECOLSの組み合わせ技!実務で今すぐ使えるテクニック
- HSTACKとCHOOSECOLSどっちを使えばいい?選び方の判断基準を公開!
- 競合記事には書いていない!CHOOSECOLSの応用テクニック3選
- 現場のプロが教える!CHOOSECOLSとXLOOKUPを自動化するVBAコード集
- 「なんでこうなるの?」現場でよく起きるトラブルとその解決策
- 生産性が爆上がりする!CHOOSECOLSと組み合わせたい最強の関連テクニック
- ぶっちゃけこうした方がいい!
- XLOOKUP+CHOOSECOLSに関するよくある質問
- 今すぐパソコンやスマホの悩みを解決したい!どうしたらいい?
- まとめ
まず知っておきたい!XLOOKUPとCHOOSECOLSが「最強コンビ」である理由
Excelで「特定のIDに対応するデータを複数列まとめて取り出す」という作業、日々の業務でよく出てきますよね。会員IDから氏名・利用回数・会員種別・受講履歴を一気に引っ張ってくる、社員番号から部署・役職・評価スコアをまとめて表示する、そういった場面です。
XLOOKUPだけで連続した列を取り出すのは実は簡単です。検索範囲と戻り範囲を指定するだけで、スピル(結果が自動的に隣のセルへ広がる機能)で複数列を一度に返してくれます。ところが、取り出したい列がA列・F列・L列のように飛び飛びになっていると話が変わってきます。
そこで登場するのがCHOOSECOLS関数です。「CHOOSE(選ぶ)」+「COLS(列)」という名前の通り、表全体の中から「この列とこの列とこの列!」と番号で指定して抽出できる関数です。Microsoft 365とExcel 2024から使えるようになった比較的新しい関数で、これを知らずに複雑な数式を書いていた方も多いはずです。
CHOOSECOLS関数の基本的な使い方をマスターしよう!
まず、CHOOSECOLS関数だけを使ったシンプルな例から確認しましょう。構文はとてもシンプルで、以下の形です。
=CHOOSECOLS(配列, 列番号1, 列番号2, …)
「配列」に表全体のセル範囲を指定して、次に取り出したい列の番号を指定していくだけです。例えば、A2:O101という表(A列からO列まで15列ある表)から2列目・7列目・6列目・12列目を取り出したい場合はこうなります。
=CHOOSECOLS(A2:O101, 2, 7, 6, 12)
ここで、これ、実は私も最初に引っかかったんですけど、列番号は「Excelの列記号(A・B・C…)」ではなく「指定した配列の中での左から何番目か」という数え方です。A2:O101という配列の場合、A列が1番目、B列が2番目、F列が6番目、G列が7番目…という具合になります。ここさえ押さえれば安心です。
この関数のすごいところは3つあります。第一に、列の順番を自由に変えられること。元の表では6列目→12列目の順番でも、抽出結果では12列目→6列目という順番に変えて表示することができます。第二に、同じ列を複数回取り出せること。「2, 2, 7」のように同じ番号を重複して指定すると、同じ列を2回取り出した結果になります。第三に、負の数で後ろから指定できること。「-1」と指定すると最後の列、「-2」なら後ろから2番目の列、という指定方法も使えます。
XLOOKUP×CHOOSECOLSの組み合わせ技!実務で今すぐ使えるテクニック
では本題、XLOOKUPとCHOOSECOLSを組み合わせた実践的な使い方を見ていきましょう。
例えば会員管理の表(A2:O101)があって、Q2セルに入力した会員IDに対応する「氏名(2列目)」「利用回数/月(7列目)」「会員種別(6列目)」「受講履歴(12列目)」を取り出したい場合の数式はこうなります。
=XLOOKUP(Q2, A2:A101, CHOOSECOLS(A2:O101, 2, 7, 6, 12))
XLOOKUPの第3引数「戻り範囲」のところに、直接CHOOSECOLSの数式を埋め込む形です。CHOOSECOLSがまず表から必要な4列を取り出し、XLOOKUPがその中から会員IDに合致する行のデータを返す、という流れです。
これを見て「あれ、前にHSTACKを使った方法と似てない?」と思った方は鋭いです。実は同じ結果を出す方法として、以下のHSTACKを使った書き方もあります。
=XLOOKUP(Q2, A2:A101, HSTACK(B2:B101, G2:G101, F2:F101, L2:L101))
結果は同じなのに、発想がまったく違います。HSTACKは「バラバラの列を横に並べて結合する」発想、CHOOSECOLSは「表全体から必要な列だけを選び直す」発想です。この違いは実務でどう効いてくるのでしょうか?
HSTACKとCHOOSECOLSどっちを使えばいい?選び方の判断基準を公開!
「結果が同じなら、どちらを使っても同じでしょ?」実はそうでもないんです。使う状況によって、片方が明らかに有利になります。
CHOOSECOLSが向いているのは、表全体を1つの塊として扱いたいときです。例えば、列の追加・削除が発生しやすい表や、複数人で共有・管理するファイル、数式を後から見直したときにパっと理解できるようにしたい場合には、CHOOSECOLSの「表全体(A2:O101)から何列目」という書き方の方が構造を掴みやすいです。
HSTACKが向いているのは、取り出す列の範囲が明確に決まっていて変動しない場合や、列ごとに別々の処理(例えばある列だけ別の計算を挟む)が必要な場合です。「B2:B101」「L2:L101」という形で列範囲を直接書くので、「この列のデータ」というイメージがダイレクトに伝わります。
以下に、両者の特徴を整理しました。
| 比較ポイント | CHOOSECOLS | HSTACK |
|---|---|---|
| 数式の発想 | 表全体から列を選び直す | 列を横に並べて結合する |
| 表の列が増減した時 | 列番号がずれる可能性あり | 指定範囲を個別修正が必要 |
| 列順の並べ替え | 自由に指定可能 | 引数の順番で決まる |
| 同じ列を複数回取得 | できる | できる |
| エラー処理 | 別途対応が必要 | XLOOKUP側で引数指定可能 |
競合記事には書いていない!CHOOSECOLSの応用テクニック3選
ここからは、他の記事ではなかなか見かけない実践的な応用テクニックをご紹介します。
応用1XMATCH関数と組み合わせて列番号を自動取得する
CHOOSECOLSの弱点として「列番号をいちいち数えなければいけない」という点があります。20列以上の表で「氏名は何番目だっけ?」と毎回数えるのは手間ですし、列の増減があると番号がズレてしまいます。これを解決するのがXMATCH関数との組み合わせです。
=XLOOKUP(Q2, A2:A101, CHOOSECOLS(A2:O101, XMATCH({“氏名”,”利用回数/月”,”会員種別”,”受講履歴”}, A1:O1, 0)))
XMATCHでヘッダー行(1行目)を検索して「氏名は何列目?」を自動で算出し、その結果をCHOOSECOLSの列番号として渡しています。こうすると、列の並び順が変わっても自動的に正しい列を取り出せるという非常に堅牢な数式になります。表の構造が頻繁に変わる業務環境にいる方には、ぜひ覚えておいていただきたいテクニックです。
応用2負の列番号で「後ろから何列目」を指定する
列数が可変で「とにかく最後から2列分だけ欲しい」という場面があります。そんな時は負の数を使います。
=CHOOSECOLS(A2:O101, -2, -1)
これで「後ろから2番目の列(N列)」と「最後の列(O列)」を取り出せます。表の列数が毎月変わるレポートなどでは、この書き方が特に便利です。
応用3CHOOSECOLSとFILTER関数で「条件に合う行の特定列だけ」を抽出する
「会員種別が『プレミアム』の人の氏名と受講履歴だけを一覧で出したい」という場合、FILTER関数とCHOOSECOLSを組み合わせます。
=CHOOSECOLS(FILTER(A2:O101, F2:F101=”プレミアム”), 2, 12)
FILTERで条件に合う行を絞り込んで、CHOOSECOLSで必要な列だけを取り出す、という2段階の処理を1つの数式でこなしています。これはXLOOKUPとは別の視点で、「絞り込み+列の選択」を同時にやりたいときに非常に強力です。
現場のプロが教える!CHOOSECOLSとXLOOKUPを自動化するVBAコード集
毎日同じ操作を手動でやり続けるのって、正直しんどいですよね。「会員IDを入力するたびにXLOOKUP数式を確認して…」という作業を、ボタン一発で終わらせてしまいましょう。ここでは実務でそのまま使えるVBAコードを3つご紹介します。
VBAコード1指定した列番号をもとにCHOOSECOLS式を自動生成してセルに挿入する
「毎回列番号を調べて手入力するのが面倒くさい」という方に最適なコードです。ダイアログで列番号をカンマ区切りで入力するだけで、CHOOSECOLS関数を含んだXLOOKUP数式を自動的に指定セルへ挿入します。
Sub InsertXlookupWithChooseCols()
Dim wsName As String
Dim searchVal As String
Dim searchRange As String
Dim dataRange As String
Dim colNums As String
Dim outputCell As String
Dim formula As String
' 入力ダイアログで各パラメータを受け取る
searchVal = InputBox("検索値のセル番地を入力してください(例Q2)", "検索値")
If searchVal = "" Then Exit Sub
searchRange = InputBox("検索範囲を入力してください(例A2:A101)", "検索範囲")
If searchRange = "" Then Exit Sub
dataRange = InputBox("表全体の範囲を入力してください(例A2:O101)", "表の範囲")
If dataRange = "" Then Exit Sub
colNums = InputBox("取り出す列番号をカンマ区切りで入力してください(例2,7,6,12)", "列番号")
If colNums = "" Then Exit Sub
outputCell = InputBox("数式を挿入するセル番地を入力してください(例R2)", "出力先セル")
If outputCell = "" Then Exit Sub
' 数式を組み立てる
formula = "=XLOOKUP(" & searchVal & "," & searchRange & "," & _
"CHOOSECOLS(" & dataRange & "," & colNums & ")," & Chr(34) & "該当なし" & Chr(34) & ")"
' 指定セルに数式を挿入
ActiveSheet.Range(outputCell).Formula2 = formula
MsgBox "数式を " & outputCell & " に挿入しました!" & vbCrLf & formula, vbInformation, "完了"
End Sub
このコードのポイントはFormula2プロパティを使っているところです。スピルに対応した数式を入力するにはFormulaではなくFormula2を使う必要があります。Formulaだとスピルが正しく動作しないことがあるので、Microsoft 365環境では必ずFormula2を使うようにしましょう。これ、地味に知らない方が多いポイントです。
VBAコード2表のヘッダー行を読み取って列番号マップを自動生成する
「列番号を毎回調べるのが嫌!列の名前で指定したい!」という要望に応えるコードです。1行目のヘッダーを自動で読み取り、列名と列番号の対応表をメッセージボックスで表示します。
Sub ShowColumnMap()
Dim ws As Worksheet
Dim lastCol As Long
Dim i As Long
Dim mapText As String
Dim headerRow As Long
Set ws = ActiveSheet
headerRow = 1 ' ヘッダーが1行目にある場合
' 最終列を取得
lastCol = ws.Cells(headerRow, ws.Columns.Count).End(xlToLeft).Column
mapText = "【列番号マップ】" & vbCrLf
mapText = mapText & "列番号 | ヘッダー名" & vbCrLf
mapText = mapText & String(30, "-") & vbCrLf
For i = 1 To lastCol
Dim cellVal As String
cellVal = ws.Cells(headerRow, i).Value
If cellVal <> "" Then
mapText = mapText & " " & i & "列目" & " | " & cellVal & vbCrLf
End If
Next i
MsgBox mapText, vbInformation, "列番号マップ(" & ws.Name & "シート)"
End Sub
使い方はシンプルで、対象のシートをアクティブにしてからこのマクロを実行するだけです。ヘッダー行の列名と列番号の対応が一覧で表示されるので、「氏名って何列目だっけ?」と迷う時間がゼロになります。20列・30列の表でも一瞬で把握できるのが便利です。
VBAコード3複数シートのデータをCHOOSECOLSで列選択しながら1シートに集約する
複数のシートに分散しているデータを、必要な列だけ選んで1枚の集計シートにまとめる、という実務でかなり多い処理を自動化するコードです。
Sub ConsolidateSheetsWithChosenCols()
Dim ws As Worksheet
Dim outputWs As Worksheet
Dim lastRow As Long
Dim outputRow As Long
Dim colInput As String
Dim colArray() As String
Dim i As Long, j As Long
Dim colNums() As Integer
' 出力先シートの名前
Const OUTPUT_SHEET As String = "集計シート"
' 取り出す列番号を入力(カンマ区切り)
colInput = InputBox("全シートから取り出す列番号をカンマ区切りで入力してください" & vbCrLf & _
"(例1,2,5 =1列目、2列目、5列目を取り出す)", "列番号の指定")
If colInput = "" Then Exit Sub
' 列番号を配列に変換
colArray = Split(colInput, ",")
ReDim colNums(UBound(colArray))
For i = 0 To UBound(colArray)
colNums(i) = CInt(Trim(colArray(i)))
Next i
' 出力シートを準備(既存なら削除して再作成)
Application.DisplayAlerts = False
On Error Resume Next
ThisWorkbook.Sheets(OUTPUT_SHEET).Delete
On Error GoTo 0
Application.DisplayAlerts = True
Set outputWs = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
outputWs.Name = OUTPUT_SHEET
outputRow = 1
' 各シートをループ
For Each ws In ThisWorkbook.Worksheets
If ws.Name <> OUTPUT_SHEET Then
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
' 2行目からデータをコピー(1行目はヘッダーとして最初のシートのみ取得)
Dim startRow As Long
If outputRow = 1 Then
startRow = 1 ' 最初のシートはヘッダーも含めて取得
Else
startRow = 2 ' 2枚目以降はヘッダー行をスキップ
End If
For i = startRow To lastRow
For j = 0 To UBound(colNums)
outputWs.Cells(outputRow, j + 1).Value = ws.Cells(i, colNums(j)).Value
Next j
outputRow = outputRow + 1
Next i
End If
Next ws
MsgBox "集計が完了しました!" & vbCrLf & OUTPUT_SHEET & "シートに " & (outputRow - 1) & " 行のデータを出力しました。", _
vbInformation, "完了"
End Sub
このコードは例えば「月別に分かれているシート(1月・2月・3月…)から、社員名と売上と達成率の列だけを1枚の集計シートにまとめたい」という場面で大活躍します。手動でコピペしていたら1時間かかる作業が、数秒で終わります。
「なんでこうなるの?」現場でよく起きるトラブルとその解決策
実際にCHOOSECOLSとXLOOKUPを使い始めた方から、よく相談を受けるトラブルをまとめました。「あ、これ私もなった!」という場面があるはずです。
トラブル1数式を入力したのに結果が1セルしか表示されない(スピルしない)
これ、本当によくある相談です。CHOOSECOLS関数を使ったのに、結果がひとつのセルにしか表示されない、もしくはスピルされるはずのセルに別のデータが入っていて#SPILL!エラーが出る、という状況です。
原因は大きく2つあります。まず1つ目は、スピルで展開されるはずのセル範囲に別のデータが入っていることです。CHOOSECOLSで4列取り出す数式を入力した場合、その数式セルから右に3列分が空欄でないとスピルできません。隣のセルにちょっとしたメモや数字が入っているだけでこのエラーになります。解決策はスピル予定範囲を空欄にすることです。
2つ目の原因は、Excelのバージョンやファイル形式の問題です。古い.xls形式(Excel 97-2003形式)で保存しているファイルだと、スピル機能が正常に動作しないことがあります。ファイルを.xlsx形式で保存し直すだけで解決することがよくあります。
トラブル2列を追加したら全部の番号がズレてしまった
「先月まで正しく動いていたのに、今月から急に違う列のデータが取れてくる」という相談です。犯人はほぼ確実に「表の途中への列の追加や削除」です。
例えばA2:O101の表で「=CHOOSECOLS(A2:O101, 2, 7, 6, 12)」という数式を使っていたとします。ここで誰かがC列とD列の間に新しい列を挿入すると、元々7列目だった「利用回数/月」が8列目にズレてしまいます。数式の列番号は自動で更新されないので、いつの間にか意図しない列のデータを取ってくることになります。
根本的な解決策は、前述の「XMATCH関数と組み合わせてヘッダー名で列を特定する」方法に切り替えることです。列番号のハードコード(直接数字を書くこと)は、長期運用するファイルでは避けた方が賢明です。ちょっと数式は長くなりますが、「なぜか先月と違う結果が出る」という謎のトラブルを未然に防げます。
トラブル3別シートの表をCHOOSECOLSで参照すると動作が遅い
「数式は合ってるのに、なぜか計算がすごく遅くなった」という場合、別シートにある大きな表全体をCHOOSECOLSの配列引数に指定していることが原因のケースがあります。
例えば「=CHOOSECOLS(Sheet2!A:O, 2, 7, 6, 12)」のように列全体(A:O)を指定してしまうと、Excelは100万行以上のデータを扱おうとして重くなります。これは実際にデータが入っているかどうかに関わらず、指定した範囲全体を処理しようとするExcelの動作によるものです。解決策は「A2:O101」のように実際にデータが入っている行まで範囲を限定することです。データが毎月増える表の場合は、Excelの「テーブル機能」(挿入→テーブル)を使って構造化参照にすると、データ追加時に自動で範囲が拡張されてこの問題を回避できます。
トラブル4CHOOSECOLS関数が「そんな関数はありません」と言われる
「ネットで調べた通りに入力したのに、エラーになる」というケースです。前述の通りCHOOSECOLSはMicrosoft 365とExcel 2024以降でしか使えません。会社のPCが古いExcel(2019や2021)の場合は利用できません。
この場合の代替手段として、INDEX関数を使った方法があります。例えば表の2列目を取り出したい場合は「=INDEX(A2:O101, 0, 2)」で代替できます。ただし複数列を同時に取り出す場合は数式が複雑になるため、実質的にはHSTACK関数を使う方法(HSTACKもMicrosoft 365以降が必要)か、VLOOKUPを複数並べる昔ながらの方法を選ぶことになります。
生産性が爆上がりする!CHOOSECOLSと組み合わせたい最強の関連テクニック
CHOOSECOLS関数の力を最大限に引き出すには、他の関数との組み合わせ方を知ることが重要です。ここでは「知っておくと仕事が変わる」テクニックを厳選してご紹介します。
テクニック1DROPCOLSで不要な列を除外してからCHOOSECOLSで並べ直す
CHOOSECOLSとよく似た関数にDROPCOLS関数があります。CHOOSECOLSが「取り出す列を指定する」のに対して、DROPCOLSは「除外する列を指定する」関数です。「ほとんどの列は必要だけど、個人情報や機密列だけ除きたい」という場合は、CHOOSECOLSよりDROPCOLSの方が数式が短くなります。
さらに、DROPCOLSで不要列を除いた結果に対してCHOOSECOLSで並べ替えをする、という2段重ねの使い方もできます。例えば「マイナンバー列と給与情報列を除いた社員表を、氏名・部署・役職の順で取り出す」といった処理を1つの数式で完結できます。
テクニック2CHOOSEROWS関数とセットで縦×横の自在な切り出しを実現する
CHOOSECOLSの「行バージョン」がCHOOSEROWS関数です。CHOOSECOLSが列を選ぶのに対して、CHOOSEROWSは行を選びます。この2つを組み合わせると、表から「特定の行かつ特定の列」という2次元の切り出しが1つの数式でできます。
例えば「売上データ表から1行目(ヘッダー)と3行目と7行目だけを取り出して、そのうち2列目と5列目だけを表示する」という処理は以下のようになります。
=CHOOSECOLS(CHOOSEROWS(A1:F20, 1, 3, 7), 2, 5)
内側のCHOOSEROWSが先に行を絞り込み、外側のCHOOSECOLSがその結果から列を選ぶ、という入れ子構造です。データの「部分的な切り出し」が必要なレポート作成で絶大な威力を発揮します。
テクニック3SORT関数とCHOOSECOLSで「並べ替え済みの選択列」を動的に表示する
「必要な列だけ取り出した上で、金額の高い順に並べたい」という要求もよくあります。SORT関数とCHOOSECOLSを組み合わせることで、これが1つの数式で実現できます。
例えば「全員のデータから氏名・健康スコア・利用回数の3列を取り出して、健康スコアの高い順に並べる」という場合はこうなります。
=SORT(CHOOSECOLS(A2:O101, 2, 15, 7), 2, -1)
CHOOSECOLSで先に3列を抽出し、その結果の2列目(健康スコア)を基準に降順(-1)で並べ替えています。これまでなら「まずデータをコピー→不要な列を削除→並べ替え」という複数ステップが必要でしたが、セルに数式を入力するだけで完結します。元データを一切触らないので、安全に集計できる点も大きなメリットです。
テクニック4テーブル機能×CHOOSECOLS×XLOOKUPで最強のデータ検索システムを作る
実務で最も安定した運用ができる組み合わせは、Excelのテーブル機能を使った構造化参照とCHOOSECOLSの組み合わせです。まず元データをテーブル(「挿入」→「テーブル」で変換)にして、仮に「MemberTable」という名前をつけます。すると数式を以下のように書けます。
=XLOOKUP(Q2, MemberTable, CHOOSECOLS(MemberTable, 2, 7, 6, 12), “該当なし”)
テーブルの場合、行数が増えても参照範囲が自動で拡張されるため、「データが100件から200件に増えたら範囲の修正が必要」という管理コストがゼロになります。また、MemberTableという列名での参照は、列の並びが変わっても自動で正しい列を参照し続けます。CHOOSECOLS部分だけはまだ番号指定なので、ここをXMATCHと組み合わせれば完全に列名ベースの参照にすることも可能です。
テクニック5LAMBDA関数でCHOOSECOLSをカスタム関数化して再利用する
Microsoft 365ではLAMBDA関数を使って、自分だけのカスタム関数を作成できます。「毎回同じ列番号の組み合わせを使う」という場合、LAMBDA関数で名前をつけておけば、短い名前で呼び出せるようになります。
「名前の管理」(数式タブ→名前の定義)で以下のように定義します。
名前GetMemberInfo
参照範囲=LAMBDA(id, XLOOKUP(id, MemberTable, CHOOSECOLS(MemberTable, 2, 7, 6, 12), “該当なし”))
こうしておくと、以後は単に「=GetMemberInfo(Q2)」と入力するだけで同じ結果が得られます。数式の詳細を知らない同僚でも使えるようになりますし、後から仕様変更があったときもLAMBDA定義を1か所修正するだけで、そのカスタム関数を使っている全セルに反映されます。チームで使うExcelファイルには特におすすめのテクニックです。
ぶっちゃけこうした方がいい!
ここまで丁寧にCHOOSECOLSとXLOOKUPの使い方を解説してきましたが、正直なところを言わせてください。
長期間・複数人で運用するファイルでは、列番号のハードコードは今すぐやめた方がいいです。本音でそう思っています。
「=CHOOSECOLS(A2:O101, 2, 7, 6, 12)」のような書き方、確かにパッと見てわかりやすいし、今その瞬間は正しく動きます。でも半年後、1年後に誰かが列を追加したとき、その「2, 7, 6, 12」という数字の意味を調べるだけで時間がかかります。しかも番号がズレてもエラーにならず、ただ黙って間違ったデータを返し続けるのが怖い。エラーが出ないバグって、気づいた時には手遅れということが多いんです。
だから、私がプロとして実務のファイルを作るとき、あるいは誰かのファイルを引き継いで整備するときは、必ずXMATCHと組み合わせた列名指定の書き方に変えます。数式は少し長くなりますが、どの列を取り出しているかが数式を読むだけで一目でわかるし、列を追加・削除しても自動で追従してくれる。メンテナンスコストが段違いに下がります。
さらに言うと、元データはテーブル化することが大前提です。セル範囲のままだとデータが増えるたびに「あ、範囲が足りなくなってた」という事態が起きます。テーブルにしておけばデータを追記するだけで参照範囲が自動拡張されるので、関数が常に正しく動き続けます。
そして、同じ処理を何度も使うならLAMBDAでカスタム関数化する。これだけで、チームのExcel力の底上げができます。「なんかよくわからない数式が入ってる…」という状態のファイルを引き継いだ経験がある方なら、この気持ちは絶対にわかってもらえるはずです。
一番のおすすめの順番はこうです。まず元データをテーブル化する。次にCHOOSECOLSとXMATCHを組み合わせて、列名で取り出す数式を書く。最後によく使う処理はLAMBDAでカスタム関数にまとめる。この3ステップを踏むと、誰が見ても読めて、誰が触っても壊れにくい、本当に使えるExcelファイルが完成します。
「今は時間がないから」と言いながら後回しにした列番号のハードコードが、半年後に「原因不明のデータズレ」として戻ってくる。そのトラブル対応にかかる時間と精神的なコストを考えたら、最初からちゃんとした書き方にした方が100倍楽です。これ、本当にそうなのでぜひ今日から実践してみてください。
このサイトをチップで応援
XLOOKUP+CHOOSECOLSに関するよくある質問
CHOOSECOLSはどのバージョンのExcelで使えますか?
CHOOSECOLSはMicrosoft 365(サブスクリプション版)とExcel 2024から使える関数です。Excel 2019やExcel 2021では利用できないため、職場の環境によっては使えないケースがあります。バージョンを確認するには、Excelの「ファイル」→「アカウント」→「Excelのバージョン情報」から確認できます。もし使えない環境であれば、前述のHSTACK関数を使った方法か、もしくは古典的なINDEX+MATCH関数の組み合わせで対応してください。
列番号を指定するとき0や列数を超えた数を入れるとどうなりますか?
#VALUE!エラーが返ります。列番号の絶対値が0、または指定した配列の列数を超えた場合にこのエラーが発生します。例えば「A2:O101」という配列(15列)に対して「16」や「-16」を指定するとエラーになります。XMATCHと組み合わせている場合、検索する見出し名が1行目に存在しないときもXMATCHがエラーを返してCHOOSECOLSに伝播します。こうした場合はIFERROR関数で囲むことでエラーを回避できます。
スピルとは何ですか?CHOOSECOLS関数の結果がどこに表示されますか?
スピルとは、数式を入力したセルの隣や下のセルに、結果が自動的に「あふれ出て」表示されるExcelの機能です。CHOOSECOLS関数を使うと、取り出した列が横方向に自動展開されます。例えば4列分を取り出した場合、数式を入力したセルから右に向かって4列分の結果が自動表示されます。スピルされた範囲(薄い青い枠で示される部分)は数式の入力セル以外は編集できません。削除したい場合は数式の入力セルのみを選択して削除してください。
XLOOKUPとCHOOSECOLSを組み合わせた数式で、もし検索値が見つからない場合はどうなりますか?
XLOOKUPには第4引数として「見つからない場合」の表示内容を指定できます。例えば「=XLOOKUP(Q2, A2:A101, CHOOSECOLS(A2:O101, 2, 7, 6, 12), “該当なし”)」とすれば、会員IDが存在しない場合に「該当なし」と表示されます。何も指定しないとデフォルトで#N/Aエラーが表示されます。業務で使う場合は必ず第4引数を設定することをおすすめします。
今すぐパソコンやスマホの悩みを解決したい!どうしたらいい?
いま、あなたを悩ませているITの問題を解決します!
「エラーメッセージ、フリーズ、接続不良…もうイライラしない!」
あなたはこんな経験はありませんか?
✅ ExcelやWordの使い方がわからない💦
✅ 仕事の締め切り直前にパソコンがフリーズ💦
✅ 家族との大切な写真が突然見られなくなった💦
✅ オンライン会議に参加できずに焦った💦
✅ スマホの重くて重要な連絡ができなかった💦
平均的な人は、こうしたパソコンやスマホ関連の問題で年間73時間(約9日分の働く時間!)を無駄にしています。あなたの大切な時間が今この悩んでいる瞬間も失われています。
LINEでメッセージを送れば即時解決!
すでに多くの方が私の公式LINEからお悩みを解決しています。
最新のAIを使った自動応答機能を活用していますので、24時間いつでも即返信いたします。
誰でも無料で使えますので、安心して使えます。
問題は先のばしにするほど深刻化します。
小さなエラーがデータ消失や重大なシステム障害につながることも。解決できずに大切な機会を逃すリスクは、あなたが思う以上に高いのです。
あなたが今困っていて、すぐにでも解決したいのであれば下のボタンをクリックして、LINEからあなたのお困りごとを送って下さい。
ぜひ、あなたの悩みを私に解決させてください。
まとめ
今日ご紹介したXLOOKUP×CHOOSECOLS関数の組み合わせは、「連続しない列を1つの数式で取り出す」という、Excelユーザーが日々直面する課題をエレガントに解決してくれます。
CHOOSECOLS単体でも「表から必要な列だけ選んで並べ直す」という使い方は非常に強力ですし、XMATCHと組み合わせれば列の番号を自動取得して、列の順番が変わっても崩れない堅牢な数式が作れます。HSTACKとCHOOSECOLSのどちらが良いかは「列ごとに個別処理が必要かどうか」「表全体を部品として扱いたいかどうか」で判断してみてください。
まずは今日使っているExcelファイルを開いて、試しに「=CHOOSECOLS(A1:E10, 1, 3, 5)」と入力してみましょう。スピルで結果が広がる感覚を一度体験すると、この関数の便利さが一気に実感できるはずです。「この関数、もっと早く知りたかった!」と思ったら、ぜひ同僚にも教えてあげてくださいね。






コメント