「担当者リストを更新するたびに、重複削除を手で何度もやっている」「行を増やしたら連番が飛んでしまった」。Googleスプレッドシートで管理表を作っていると、こんな手作業に悩まされますよね。
実は、4つの関数を組み合わせるだけで、データが増減しても自動で更新される「動的リスト」を簡単に作れます。使うのはUNIQUE・SEQUENCE・SORT・ARRAYFORMULAの4つです。
この記事では、動的リスト作りの中核になる4関数の役割を1ページで整理します。実務でよく使う3つの組み合わせシナリオも数式付きで紹介しますよ。ExcelとSheetsの互換性差異もまとめてあるので、ExcelからSheetsに移ってきた方にもおすすめです。
スプレッドシートで動的リストを作る関数の全体像
スプレッドシートの「動的リスト」とは、元データが増減すると参照先も自動で更新されるリストのことです。手動で範囲を広げ直したり、コピペで連番を振り直したりする手間がなくなります。
動的リストを支える4つの関数
動的リスト作りに登場する関数は、突き詰めると次の4つだけです。
- UNIQUE:重複を取り除いて、一意の値だけを返す
- SEQUENCE:連続した番号を一気に生成する
- SORT / SORTN:範囲を並び替える(SORTNは上位N件だけ取り出す)
- ARRAYFORMULA:1つの数式を範囲全体に展開する
このうちUNIQUE・SEQUENCE・SORTはExcel 365にもあります。一方、SORTNとARRAYFORMULAはGoogleスプレッドシート固有の関数です。
なぜ「組み合わせ」が前提なのか
これらの関数は単独でも便利ですが、本領を発揮するのは組み合わせて使ったときです。たとえば「担当者の一覧を作りたい」場面を考えてみます。UNIQUEで重複を消し、SORTで並べ替え、FILTERで空白を除く、という3つの動きを1つの数式にまとめられます。
実務では「ユニーク化+並び替え」「連番+データ件数連動」「全行に条件適用」といった複合ニーズが多いんですよね。複数の処理を1つの数式にまとめると、メンテナンスもラクになります。
各関数の詳しい構文や引数は、それぞれの個別記事に詳しくまとまっています。本記事では「実務でどう組み合わせるか」に絞って解説していきます。
UNIQUE・SEQUENCE・SORT・ARRAYFORMULAの役割比較表
最初に、4関数の機能を1枚にまとめた比較表を見てみましょう。「どの関数が何の役割を担うか」を判断する早見表として使ってください。
4関数の機能比較表
| 関数 | 主な目的 | 戻り値の形 | Excel互換 | Sheets固有機能 |
|---|---|---|---|---|
| UNIQUE | 重複除去 | 動的配列 | あり(365・2021) | 第3引数の「1回だけ登場」抽出 |
| SEQUENCE | 連番生成 | 動的配列 | あり(365・2021) | なし |
| SORT | 並び替え | 動的配列 | あり(365・2021) | なし |
| SORTN | 並び替え+上位N件 | 動的配列 | なし | Sheets専用関数 |
| ARRAYFORMULA | 数式の全行展開 | 動的配列 | なし(暗黙スピルで代替) | Sheets専用関数 |
UNIQUE・SEQUENCE・SORTはExcel 365でも同じ構文で使えます。一方、SORTNとARRAYFORMULAはSheets限定の関数です。Excelに数式を持ち出すときは、この2つを別の関数で書き換える必要があります。
「重複除去」「連番」「並び替え」「全行展開」の役割分担
4関数を実務目的で並べ替えると、次のように整理できます。
- 重複を消したい → UNIQUE
- 連番を振りたい → SEQUENCE
- 並び替えたい → SORT(上位N件ならSORTN)
- 全行に同じ判定をしたい → ARRAYFORMULA
この4つの役割を組み合わせるだけで、ほとんどの動的リストが作れます。
TIP
ARRAYFORMULAは「他の関数を全行に広げる接着剤」として機能します。単独で使うことはほぼなく、IFやVLOOKUPと組み合わせるのが基本です。
シナリオA:UNIQUE+SORTで担当者のユニーク一覧を自動更新
ここからは、実務でよく登場する3つの組み合わせシナリオを紹介します。最初は「担当者のユニーク一覧を自動更新する」パターンです。
元データと完成イメージ
A列に担当者名が並んでいる受注管理表があるとします。同じ担当者が複数行に登場するため、別シートで「担当者の一覧」を自動生成したい、という場面ですね。
完成形の数式はシンプルです。
=SORT(UNIQUE(FILTER(A2:A, A2:A<>"")))
A列に担当者を追加したら、別シートのリストも自動で更新されます。手動でドロップダウンの選択肢を増やす必要はありません。
数式を3層で読み解く
この数式は内側から読むのがコツです。
- FILTER(A2:A, A2:A<>“”):A列の空白以外を抽出
- UNIQUE(…):抽出結果から重複を除いて一意の値だけ残す
- SORT(…):結果を昇順に並び替える
FILTERで空白を先に除外しているのがポイントです。UNIQUE単体だと空白行も「1つの空白」として一覧に残ってしまうため、FILTERでラップしてから渡しています。
データ検証(プルダウン)の入力範囲に使う
このユニーク一覧をデータ検証(入力規則)の選択肢として使うと、便利な動的プルダウンが完成します。
- プルダウンを設定したいセルを選択
- メニューから「データ」→「データの入力規則」
- 条件で「リストを範囲で指定」を選ぶ
- 範囲に
'マスタ'!A2:A100のように、ユニーク一覧のスピル範囲を指定する
A列に新しい担当者が追加されたら、プルダウンの選択肢にも自動で反映されます。
NOTE
プルダウンの参照範囲は余裕をもたせて100行や1000行で指定しておくと、ユニーク数が増えても対応できます。スピル範囲を超える指定をしても空白セルが選ばれるだけで害はありません。
シナリオB:SEQUENCE+COUNTAで行数可変の自動連番を作る
2つ目のシナリオは「行数が変わっても自動で連番を振り直す」パターンです。
元データと完成イメージ
B列にデータが並んでいて、A列に1から始まる連番を自動で振りたい、という場面です。データが増えたり減ったりしても、A列の連番が常に正しい状態に保たれるのが目標です。
完成形の数式は、A2セル1つに次のように書きます。
=SEQUENCE(COUNTA(B2:B))
A2に入れるだけで、B列のデータ数に応じた連番がA2から自動で展開されます。データを増やせば連番も伸び、削除すれば連番も縮みます。
COUNTAで「データのある行数」を数える理由
SEQUENCEの第1引数は「生成する行数」です。これにB列のデータ件数を渡せば、データ数ぴったりの連番が作れます。
COUNTAは「空白でないセルの数」を返す関数です。B列にデータが10行入っていれば10、20行に増えれば20を返します。SEQUENCEがその数を受け取って、1〜10や1〜20の連番を返してくれる、という仕組みですね。
動作のポイント
- A2セルにだけ数式を書き、ほかの行はSEQUENCEのスピルで自動的に埋まる
- B列が空白行を含む場合は、COUNTAではなく
COUNTIF(B2:B, "?*")などで条件を変える - 開始番号を変えたいなら
SEQUENCE(COUNTA(B2:B), 1, 10)で10からスタートできる
TIP
オートフィルで連番を作ると、行を挿入したときに番号が飛びます。SEQUENCE+COUNTAなら、行の挿入・削除に強い自動連番が作れますよ。
行ごとの条件付き連番
「ステータスが完了の行だけ連番を振りたい」のような応用も可能です。
=ARRAYFORMULA(IF(C2:C="完了", COUNTIFS(C$2:C2, "完了"), ""))
この場合はSEQUENCEではなくCOUNTIFSの累積カウントを使います。シナリオCで紹介するARRAYFORMULAの応用例ですね。
シナリオC:ARRAYFORMULAで全行に条件付き数式を展開する
3つ目のシナリオは「全行に同じ判定を一気に適用する」パターンです。
元データと完成イメージ
B列にテストの点数が並んでいて、C列に「合格」「不合格」を判定したいとします。
通常なら、C2セルに =IF(B2>=80, "合格", "不合格") を入れて、下までドラッグでコピーしますよね。ところが、データが増えるたびに数式をコピーし直すのは面倒です。
ARRAYFORMULAを使うと、C2セル1つに数式を書くだけで、B列のデータがある行すべてに判定を展開できます。
=ARRAYFORMULA(IF(B2:B="", "", IF(B2:B>=80, "合格", "不合格")))
B列に新しい点数を追加すると、C列の判定も自動で広がります。
数式の構造を読み解く
二重のIFを入れているのには理由があります。
- 外側のIF:B列が空白なら何も表示しない(空白行に「不合格」と出るのを防ぐ)
- 内側のIF:B列に値があれば、80点以上で「合格」、それ未満で「不合格」と判定
外側のIFを省くと、空白行にも「不合格」と表示されて見栄えが悪くなります。空白行の制御はARRAYFORMULAを書くときの定番テクニックです。
ARRAYFORMULA内ではAND・ORが使えない
ここで注意点が1つあります。ARRAYFORMULA内ではAND・OR関数が動きません。複数条件を組み合わせたいときは、*(積)と+(和)の演算子を使います。
「80点以上 かつ 出席率80%以上」(ANDの代替)
=ARRAYFORMULA(IF(B2:B="", "", IF((B2:B>=80)*(C2:C>=0.8), "合格", "不合格")))
「80点以上 または 加点あり」(ORの代替)
=ARRAYFORMULA(IF(B2:B="", "", IF((B2:B>=80)+(D2:D>0), "合格", "不合格")))
*はTRUE×TRUEのときだけ1(合格判定)になり、+はどちらかがTRUEなら1以上になる仕組みです。
NOTE
*はAND、+はOR、と覚えると簡単です。ARRAYFORMULAをマスターすると、IFの3段ネストやVLOOKUPの全行展開も同じパターンで自動化できます。
条件分岐の関数選びで迷う場合は、関連記事も参考にしてみてください。詳しい使い分けは スプレッドシートのIF・IFS・IFERROR・IFNAの使い分け にまとまっています。
VLOOKUPと組み合わせて全行に展開する
ARRAYFORMULAはVLOOKUPやXLOOKUPと組み合わせると、列全体の参照を1つの数式で書けます。
=ARRAYFORMULA(IF(A2:A="", "", VLOOKUP(A2:A, マスタ!A:B, 2, FALSE)))
A列に商品コードを追加すると、B列に単価が自動で入ります。VLOOKUPやXLOOKUPの使い分けは、 VLOOKUP・XLOOKUP・INDEX/MATCH 使い分けガイド にまとめてありますよ。
ExcelのUNIQUE・SEQUENCEとの互換性差異
スプレッドシートで作った動的リストの数式を、Excelに持っていって動かしたい場面もありますよね。ここではExcel側との互換性を整理しておきます。
Excel 365/2021との互換性表
| 関数 | Excel 365/2021 | Excel 2019以前 | Sheetsとの違い |
|---|---|---|---|
| UNIQUE | 使える | 使えない | 構文ほぼ同一 |
| SEQUENCE | 使える | 使えない | 構文同一 |
| SORT | 使える | 使えない | 構文同一 |
| SORTN | 使えない | 使えない | Sheets専用 |
| ARRAYFORMULA | 使えない | 使えない | Excelは暗黙のスピルで代替 |
| FILTER | 使える | 使えない | 構文同一 |
UNIQUE・SEQUENCE・SORTはExcel 365なら同じ構文で動きます。一方、SORTN・ARRAYFORMULAはSheets専用なので注意が必要です。
Sheets→Excelに数式を持っていくときの書き換え
Excel 365に数式をコピーするときは、次のように書き換えます。
- SORTN(範囲, n) → SORTで並び替えてからINDEXやTAKEで上位n件を取り出す
- ARRAYFORMULA(…) → 関数自体を外して、Excel 365の暗黙スピルに任せる
- AND/ORの代替
*・+→ そのままで動く(ExcelもSheetsと同じ挙動)
たとえば =ARRAYFORMULA(IF(B2:B>=80, "合格", "不合格")) をExcel 365で動かすには、=IF(B2:B100>=80, "合格", "不合格") のように範囲を明示するだけで動きます。
Excel 2019以前を意識するときは配列数式に書き換え
Excel 2019以前を使う環境にデータを渡すなら、UNIQUE・SEQUENCE・SORTそのものが使えません。次のように書き換えます。
- UNIQUE → 配列数式
{=IFERROR(INDEX(...), "")}パターン、またはピボットテーブルで重複削除 - SEQUENCE → ROW関数で代替(
=ROW(A1)を下にコピー) - SORT → LARGE/SMALL関数の組み合わせで配列数式
Excel 2019以前は動的配列に対応していないので、Ctrl+Shift+Enterで配列数式として入力する必要があります。
TIP
配布先の環境がExcel 2019以前なら、SheetsからCSVでエクスポートする前に「値だけ貼り付け」で確定値に変えてから渡すのが確実です。数式を渡す必要がないケースも多いですよ。
スプレッドシートの動的リスト関数のよくあるエラーと対処法
最後に、UNIQUE・SEQUENCE・SORT・ARRAYFORMULAを使い始めたときに陥りがちな落とし穴を3つ紹介します。
#REF! エラー(スピル先にデータあり)
UNIQUEやSEQUENCEを入力したら #REF! と表示される問題です。
=UNIQUE(A2:A)
この数式が #REF! になるのは、結果が展開される下のセルに別のデータが入っているからです。動的配列はスピル先が空でないと展開できません。
対処法は次のとおりです。
- スピル先に入っているデータを削除する
- 数式を入れるセル位置を、空き行が十分にある場所に変える
- 結合セルがスピル先にある場合は結合を解除する
UNIQUEの結果に空白行が混じる問題
UNIQUEを使ったら、空白の値が一覧に1つ残ってしまうケースです。
=UNIQUE(A2:A)
A列の途中に空白行があると、UNIQUEは「空白も1つの値」として扱うので、結果に空白が混じります。
対処法はFILTERで空白を除外することです。
=UNIQUE(FILTER(A2:A, A2:A<>""))
シナリオAでも紹介した定番パターンですね。SORTでくるむと並び替えも一緒にできます。
ARRAYFORMULAでANDが効かない問題
複数条件を組み合わせようとして、次のように書いたら結果が変になるケースです。
=ARRAYFORMULA(IF(AND(B2:B>=80, C2:C>=0.8), "合格", "不合格"))
ARRAYFORMULA内ではAND関数が範囲全体に対して1つの結果しか返しません。全行が同じ判定になってしまうんですよね。
対処法は *(積)演算子に書き換えることです。
=ARRAYFORMULA(IF((B2:B>=80)*(C2:C>=0.8), "合格", "不合格"))
OR関数も同じ理由で動かないので、+(和)演算子で代替します。シナリオCでも触れたとおり、ARRAYFORMULAを書くときの基本ルールとして覚えておくと便利ですよ。
スプレッドシートの動的リスト関数の使い分けまとめ
スプレッドシートの動的リストは、UNIQUE・SEQUENCE・SORT・ARRAYFORMULAの4関数で必要十分です。
「目的→関数」の早見ガイド
実務での選び方をまとめると、次のようになります。
- 重複を消したい → UNIQUE(空白除外はFILTERでラップ)
- 連番を振りたい → SEQUENCE(行数はCOUNTAで動的に取得)
- 並び替えたい → SORT、上位N件だけ取り出すならSORTN
- 全行に同じ判定をしたい → ARRAYFORMULA(AND/ORは
*/+で代替)
この4ステップに従えば、動的リスト作りで関数選びに迷うことはほぼなくなります。
個別記事への深掘り誘導
それぞれの関数の構文や引数、応用パターンは個別記事にもっと詳しくまとめています。
- 重複除去の基本: スプレッドシートのUNIQUE関数の使い方
- 連番生成の基本: スプレッドシートのSEQUENCE関数の使い方
- 並び替えの基本: スプレッドシートのSORT関数の使い方
- 上位N件の取り出し: スプレッドシートのSORTN関数の使い方
- 全行展開の基本: スプレッドシートのARRAYFORMULA関数の使い方
条件分岐とエラー処理を組み合わせる場合は、 スプレッドシートのIF・IFS・IFERROR・IFNAの使い分け や VLOOKUP・XLOOKUP・INDEX/MATCH 使い分けガイド もあわせて参照してください。
「マスタを更新するたびに参照先を直しに行くのが面倒」「連番がいつも飛ぶ」状態は、UNIQUE+SORTやSEQUENCE+COUNTAで一気に解消できます。まずは手元の管理表で1つだけ、動的リストに置き換えてみてくださいね。
