ラベルラベル

動的配列・スピル入門

UNIQUE関数を見て理解する

配列から重複する行や列を除き、一意のデータだけを新しい配列として返す関数です。

3つのポイント

  1. 重複を調べる表全体を指定する
  2. 比較する向きを行または列で切り替える
  3. 一意の結果を複数セルへスピルする
例題

社員データの重複行・重複列を条件別に取り除く

サンプル数式

  • 配列
  • 列を比較
  • 1回だけ出現

いまの結果:

3行 × 3列
計算結果
結果セル:H2スピル範囲:H2:J4

先頭行:「田中」 | 「営業」 | 「営業」

入力・条件:3項目
  • 配列A2:C5(4行 × 3列)先頭行:「田中」 | 「営業」 | 「営業」
  • 列を比較E2:FALSE
  • 1回だけ出現F2:FALSE
この結果になる理由

重複を取り除く条件を適用した結果です。

サンプルデータ

列の比較を切り替えてみよう

※ Excel と Google スプレッドシートで結果や挙動が異なる場合、Excel の仕様を基準にしています。

「社員データの重複行・重複列を条件別に取り除く」のサンプルデータ。引数番号は正式引数と教材要素の対応、小さな角丸数字は処理順を表します。
ABCDEFGHIJ
1社員名所属部署担当部署 列を比較1回だけ出現 結果  
2田中営業営業  田中営業営業
3佐藤開発開発    佐藤開発開発
4田中営業営業    鈴木人事人事
5鈴木人事人事       
配列列を比較1回だけ出現起点セルスピル結果
①・②・③ 正式引数 / 教材要素1–4 処理の流れ

E2、F2に値を入力すると、結果と処理順が変わります。

3つの引数

色付きの丸数字は、サンプル数式と引数ガイドで同じ引数を示しています。表にも同じ番号があれば、その引数で指定しているセルを示します。

  1. A2:C5表のセル: A2:C5

    重複を調べる社員データです。同じ社員レコードが1件重複し、所属部署と担当部署はこの例では同じ内容です。

  2. E2表のセル: E2

    FALSEでは行どうし、TRUEでは列どうしを比較して重複を判定します。

  3. F2表のセル: F2

    FALSEでは重複を1件にまとめ、TRUEでは1回だけ現れる行または列だけを返します。

この数式を日本語にすると

A2:C5の社員データには、田中さんの行が重複しており、所属部署と担当部署の2列はこの例では同じ内容です。E2で行と列のどちらを比較するか、F2で重複を1件にまとめるか1回だけ現れるものだけ残すかを切り替えます。

この説明は、最初に表示されているサンプルデータをもとにしています。入力値を変更しても説明文は変わりません。

処理の流れ

手順1〜4を順番に確認しましょう。表内の小さな角丸数字は、対応する手順を示します。

  1. 配列を確認する

    A2B2C2A3B3C3A4B4C4A5B5C5

    A2:C5を重複判定の対象にします。

  2. 比較する向きを確認する

    E2

    FALSEとして評価されるため、行どうしを比較します。

  3. 残すデータの条件を確認する

    F2

    FALSEとして評価されるため、重複する行は最初の1件だけを残します。

  4. 重複をまとめて一意の配列を返す

    H2:J4

    重複する行を1件にまとめ、3行×3列の結果をH2:J4へスピルします。

対応アプリ

  • Excel
  • Google スプレッドシート

関数自体が対応するアプリです。教材例の数式や再計算が、両アプリで同じように動くことを保証するものではありません。

この例の注意点

  • UNIQUEは同じ行や列が複数あっても、通常は最初に現れた1件だけを結果に残します。
  • 第2引数のby_colがFALSEなら行どうし、TRUEなら列どうしを比較します。
  • 第3引数のexactly_onceがFALSEなら重複を1件にまとめ、TRUEなら1回だけ現れる行または列だけを返します。
  • この教材では取込データに同じ社員レコードが重複しているケースと、所属部署と担当部署の内容が全員同じケースを使い、4つの組み合わせで結果がどう変わるか確認できます。
  • 結果は条件に応じた行数・列数へ自動的にスピルします。

一般構文

対応:Excel / Google スプレッドシート ・ 構文:構文差あり

  • Google公式構文のby_columnとexactly_onceには[]がありませんが、本文に既定値が記載されています。
  • 文字列の重複判定では、Excelは大文字小文字や全角・半角の幅を同一視するケースがありますが、Google スプレッドシートでは別値として扱うケースがあります。
  • by_colに式由来の空文字列など一部の値を渡した場合、Excelは#VALUE!になりますが、Google スプレッドシートでは結果を返すケースがあります。

Excel

=UNIQUE(array, [by_col], [exactly_once])

[] は省略できる引数です。

省略時

by_col
→ FALSE省略すると、行どうしを比較します。
exactly_once
→ FALSE省略すると、1回だけの値に限定せず、重複を除いた値を返します。

Google スプレッドシート

=UNIQUE(range, by_column, exactly_once)

[] がない引数も、公式本文で省略時の扱いが説明されている場合があります。

省略時

by_column
→ FALSE省略すると、行を比較して重複を除きます。
exactly_once
→ FALSE省略すると、重複した値も1件にまとめて返します。
公式資料・確認範囲

公式資料

実機確認

  • Excel 2021 / Google スプレッドシート計算結果・入力の扱い・エラーを確認済み

未確認

配列展開

次に学ぶ関数

SORT

重複を除いた一覧の次は、その一覧を並べ替えます。

次に学ぶ