こんにちは。経営企画室のゆりえです。会社全体のさまざまな数字を管理しています。これまでのLIGブログでは、エクセルやスプレッドシートの活用法に関する記事を書きました。
表計算において、データの重複を削除したいときがあると思います。データをコピーして削除の処理をしたり、関数を使って個数を数えて重複を判断したり、いろいろな方法があると思いますが、今回は、おそらく一番簡単に重複削除ができるUNIQUE関数についてまとめました。Googleスプレッドシートの独自関数です。
UNIQUE関数
使い方
エクセルにはない関数なのですが、指定したセルの範囲について重複をカットし、文字どおりユニークなデータをリアルタイムで表示してくれる関数です。
- 関数
- =UNIQUE(セル範囲)
※Googleスプレッドシート独自の関数
これだけですでに簡単そうなのがわかります。使ってみましょう。
例題として、画像のようなデータがあります。このC列「品名」について、重複を省いたリストを表示したい……!
そこでUNIQUE関数の出番です。F3セルに、このような数式を入力しましょう。
=UNIQUE(C3:C)
数式のセル範囲「C3:C」は、C3セルからC列の一番下の行までをセル範囲として指定しています。実際にデータが入っている「C3:C17」でも良いのですが、データが入る可能性のある最下端の行数まで網羅しておくと、あとあと便利です(後述)。
エンターー!
はい、これだけです。これだけで、「品名」の重複を省いたデータが表示されました。一瞬でした。
すごーい。この関数は、特定のセルに入力した数式の結果が他のセルに影響を及ぼす関数なんですね。1つのセル(F3)にしか入力をしていないのに、なにもないはずの他のセル(F4~F7)にまたがって答えが返ってくるのです。
これは、いくつかあるスプレッドシートの独自関数の特徴のひとつでもあります(エクセルにも、他のセルに計算結果が影響する数式はあるのですが、スプレッドシートほど自由度があるわけではなくかなり特殊なものという印象です)。
他のセルに影響を及ぼすとはどういうことでしょうか。
数式の入っていないセルを見てみると、数式バーには入力していないのに、ちゃんとデータの値が表示されています。しかしそのセルをDeleteしてみると、一瞬データが消えてすぐにデータが復活するのです。これは、そのセルにはデータが入っているけれど、そのセルに起因しないデータであることを示していて、だから消しても消えないし消せないということを示してるんだと思うんです。
反対に、Deleteではなく任意の文字を入力してみましょう。UNIQUE関数の結果に上書きして入力。すると今度は、UNIQUE関数を入力したセルがエラー#REFになってしまい、他のセルのデータも消えてしまいました。
これは、数式結果の反映先に、すでに何かが入力されてるから結果を反映できないというエラーです。自分のセルだけじゃなくて反映する他のセルがきちんと空欄になっているかどうかもチェックしてからデータを返してくれるので、不用意に数式を入れても気づくことができます。
ちなみにエラーについては以前この記事でご紹介させていただきました。エラーは偉大。 仕事に役立つ!Excelのエラー対処法まとめ
他のセルにもデータを反映させてしまうUNIQUE関数、すごいですね。なによりも数式が簡単で入力した瞬間にデータがぱっと出てくるので、挙動がかっこいいです。なんだかすごいことをやっている気分にしてくれるところが好きです。
もとのデータを変更すると?
UNIQUE関数は、指定したセル範囲のデータの重複をリアルタイムにチェックしています。では、そのデータに変更が発生した場合はどうなるのでしょうか。
C6セルの「りんご」を「ぶどう」に変えてみます。「ぶどう」は、F列のリストにはない新しい項目です。
エンター。「ぶどう」を入力すると、その瞬間にUNIQUE関数の結果が変化します。
リストに「ぶどう」が増えました! リアルタイムで常に重複を省いた一意のリストを表示することができます。
新しいデータを追加すると?
18行目以降にデータを追加した場合も同様です。ただし、UNIQUE関数で指定しているセルの範囲内に限ります。例題の場合は、C列の最下端まで範囲指定しているので、18行目以降に新しくデータを入力したときも瞬時にUNIQUE関数の結果に反映されます。
データを追加する可能性がある場合は、それもふまえてセル範囲の下端を設定しましょう。
もとのデータが変わったり追加されても、リアルタイムで反映されるので、その都度重複チェックの作業をし直す必要がなく安心&楽ですね。
複数列のデータの重複を削除する
複数列に対しての重複チェックもすることができます。今度は、1列だけではなく2列(B列×C列)の組み合わせに対して、一意のリストを表示させましょう。
UNIQUE関数で指定したセル範囲をこのように変更し、B列とC列を指定します。
=UNIQUE(B3:C)
どーん!
B列×C列の重複を省いたリストができました! データの範囲を指定するだけなので簡単ですね。
もちろん3列以上の場合にも、同様にセル範囲を変更するだけでOKです。
横方向のデータの重複を削除する
これまでは、縦方向のデータについてでしたが、横方向のデータの場合はどうでしょう。
このようなデータがあります。3行目の「品名」の重複を削除したい……!
C列以降の3行目をUNIQUE関数で指定してみると……、
重複が削除されませんでした。
UNIQUE関数は(今のところ)縦方向の重複チェックに対応した関数のため、横方向のデータは1つの組み合わせとして判断されてしまうので、重複は削除されないので注意です。
でも! 別の関数と組み合わせる(ネストする)ことで、横方向の重複もカットすることができます。TRANSPOSE関数の出番です。
- 関数
- =TRANSPOSE(セル範囲)
※2007以降のExcel、スプレッドシートに対応
TRANSPOSE関数は、指定したセル範囲のデータを縦横に転置して表示できる関数です。この関数もUNIQUE関数と同様、計算結果が他のセルに影響を及ぼす関数です。
UNIQUE関数のセル範囲をTRANSPOSE関数で囲って縦型のデータに変換します。このように入力すると……
=UNIQUE(TRANSPOSE(C3:3))
計算結果が縦型で表示されました! そして、重複が削除されましたね! 求めていた結果が得られました。横型だったデータをTRANSPOSE関数で縦型にしたため、UNIQUE関数の重複チェックを有効にすることができたのです。
また、その結果も横方向に表示させたいときは、さらにTRANSPOSEでネストしましょう。
=TRANSPOSE(UNIQUE(TRANSPOSE(C3:3)))
横方向を縦にして、重複をカットして、また横方向に転置するのを、囲っただけでできちゃいました。
さいごに
UNIQUE関数についてお話させていただきました。
スプレッドシートの独自関数は他にもいくつかあるのですが、便利だなと思うところは、これまではちょっとややこしいかな、難しいかなって思っていたことをシンプルに実現してくれるところだと思っています。
瞬時にばーっとデータが反映されるのはとても楽しいので、ぜひ一度使ってみてください♩
ありがとうございました。
- Googleスプレッドシートに関する記事はこちら