【Googleスプレッドシート】重複条件を複数列で判定する!UNIQUEとARRAYFORMULAの組み合わせ

【Googleスプレッドシート】重複条件を複数列で判定する!UNIQUEとARRAYFORMULAの組み合わせ
🛡️ 超解決

「商品名とカテゴリの両方が一致する行を重複とみなしたい」そんな状況はありませんか? 例えば、在庫管理で同じ商品が異なるカテゴリに登録されている場合、その組み合わせを一意にしたいことがあります。しかし、GoogleスプレッドシートのUNIQUE関数だけでは、複数列をまたがった重複判定ができません。そこで、ARRAYFORMULA関数を組み合わせて、複数列の値を連結してからUNIQUEを適用する方法を紹介します。この方法を使えば、簡単な式で複数列の重複を判定できるようになります。

【要点】UNIQUEとARRAYFORMULAで複数列の重複を判定する方法

  • =UNIQUE(ARRAYFORMULA(A2:A&”_”&B2:B)): この式でA列とB列の組み合わせのユニークなリストを取得します。
  • ARRAYFORMULAによる列の結合: 複数列の値を行ごとに1つの文字列に結合し、UNIQUE関数で重複を除去します。
  • SPLIT関数で元の列に分割: 結合した文字列をSPLIT関数で分割すれば、元の複数列の形式で結果を得られます。

ADVERTISEMENT

UNIQUEとARRAYFORMULAで複数列の重複を判定する仕組み

UNIQUE関数は、指定された1つの列または行範囲から一意の値を抽出します。しかし、複数列を範囲で指定しても、各列のセルの値を別々の配列要素として扱うため、行ごとの組み合わせを考慮できません。例えば、=UNIQUE(A2:B5)と入力すると、A列とB列の全セルが1つのリストとして扱われ、行の組み合わせではなく個々のセルの値で重複が判定されてしまいます。

そこでARRAYFORMULAの出番です。ARRAYFORMULAは、配列演算を各セルに適用できます。この関数を使って、A列とB列の値を「&」演算子で結合し、1つの文字列に変換します。例えば、=ARRAYFORMULA(A2:A5&”_”&B2:B5)とすると、各行のA列とB列の値が「値1_値2」のように結合された配列が生成されます。この結合配列をUNIQUE関数で処理すれば、行ごとの組み合わせで一意な値だけが抽出されるのです。

抽出後、SPLIT関数を使って区切り文字で分割すれば、元の複数列の形に戻せます。このテクニックにより、複数列の条件で重複を簡単に判定できます。

UNIQUE+ARRAYFORMULAで重複条件を複数列で判定する手順

  1. データを準備する
    まず、重複を判定したいデータが入力されたシートを用意します。ここでは例として、A列に商品名、B列にカテゴリが入力されているとします。データは2行目から始め、最終行まで入力されているものとします。
  2. 結合列の式を入力する
    新しい列(例えばC列)に、次の式を入力します。
    =ARRAYFORMULA(A2:A&"_"&B2:B)
    この式は、A列とB列の値を行ごとに「_」で結合した文字列を生成します。範囲は実際のデータに合わせて調整してください。
  3. UNIQUE関数で重複を除去する
    別のセル(例えばD1)に、次の式を入力します。
    =UNIQUE(C2:C)
    これで、結合列の中で一意な値だけが抽出されます。ただし、この段階ではまだ結合された文字列です。
  4. SPLIT関数で元の列に分割する(オプション)
    必要に応じて、抽出した結合文字列を元の複数列に分割します。E1セルに次の式を入力します。
    =ARRAYFORMULA(SPLIT(UNIQUE(C2:C), "_"))
    これで、E列とF列にそれぞれ元のA列、B列の値が表示されます。
  5. ワンステップで実行する式
    上記の手順を1つの式にまとめることも可能です。次の式をどこかのセルに入力してください。
    =UNIQUE(ARRAYFORMULA(A2:A&"_"&B2:B))
    この式だけでも結合列が生成され、重複除去されます。分割が必要な場合は2番目の式を組み合わせてください。

複数列重複判定の注意点とよくある失敗

データ内の区切り文字に注意する

結合に使う区切り文字(例では「_」)が、データの中に含まれていると誤った重複判定になります。区切り文字はデータに絶対に出現しない文字列(例:「@@@」など)を選ぶか、特殊な文字列を使うことをおすすめします。また、区切り文字を空文字にすると、値がそのまま連結されて区別できなくなるので避けてください。

空白セルがある場合の扱い

結合する列に空白セルがあると、空文字として連結されます。例えば、A2が「商品A」、B2が空欄の場合、「商品A_」という文字列になります。これは意図しない重複の原因になります。空白セルを無視したい場合は、IF関数を使って条件を追加します。例:=ARRAYFORMULA(IF(A2:A="", "", A2:A&"_"&B2:B))

最終行の指定を忘れない

範囲指定でA2:Aのように無限範囲を使うと、空行も含まれてしまいます。データが入力されている最終行までの範囲を指定するか、必要に応じてA2:A100のように固定範囲を設定します。無限範囲を使用する場合は、後で空行の重複が発生しないように注意してください。

数値と日付の結合時の自動変換

「&」演算子で数値や日付を文字列に結合すると、数値はそのまま数字に、日付はシリアル値に変換されます。日付を特定の形式にしたい場合は、TEXT関数でフォーマットを指定してから結合します。例:=ARRAYFORMULA(A2:A&"_"&TEXT(B2:B,"yyyy/mm/dd"))

ADVERTISEMENT

UNIQUE+ARRAYFORMULAと他の方法の比較

方法 メリット デメリット
UNIQUE+ARRAYFORMULA 簡単な式で実装できる。リアルタイム更新。行の追加に対応しやすい 結合用の区切り文字が必要。結果を元の列に分割する手間がかかる
QUERY関数(SELECT DISTINCT) 結合や分割が不要。複数列をそのまま扱える。SQLライクな記述が可能 式がやや複雑。範囲指定や並べ替えの構文を覚える必要がある
フィルター系アドオン GUI操作で直感的。非エンジニアにも使いやすい アドオンのインストールが必要。リアルタイム更新ができない場合がある

以上、UNIQUE関数とARRAYFORMULA関数を組み合わせて複数列の重複を判定する方法をご紹介しました。このテクニックを使えば、複数の条件を満たす行だけの一意なリストを簡単に作成できます。例えば、顧客名と商品名の組み合わせで重複注文をチェックするなど、さまざまな場面で応用可能です。次に、QUERY関数を用いた重複チェックや、条件付き書式と組み合わせて重複を視覚的にハイライトする方法も試してみてください。また、UNIQUE関数のオプションで「UNIQUEの範囲内で最初の行だけ」など、さらに高度な条件を設定することもできます。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。