いきなり答える備忘録

G Suite・Microsoft 365・LibreOfficeなどに関するメモと日々の実験

(Gスプレッドシート)一部の列の値が他の行と重複する行を抽出する

 Googleスプレッドシートで、全体のうち一部の列の値が他の行と重複している行を探して行全体を抽出する方法についてです。例えば出身地が他の人とダブっている人を見つける、といったことができます。
 この手の抽出が得意なAccessでもなかなか複雑な抽出になるため「重複クエリ」という機能が用意されているぐらいですが、スプレッドシートでは比較的簡単に実現できます。

  • FILTER関数とCOUNTIF(S)関数を使って、一部の列の値が他と重複している行を抽出できます。
  • 同様に重複していない行を抽出することもできます。

手順

f:id:accs2014:20200711135647p:plain:right:w600

 画像では、B~D列の表のうち「居住地」の列の値が他と重複している行を探し、行全体を抽出しています。
 F3セルに入力されている式は次のとおりです。

 F3セル

=FILTER(B3:D12,COUNTIF(C3:C12,C3:C12)>1)

 FILTER関数を使い、C列の値をC列全体からカウントしたときに2以上(>1)となる行を抽出しています。
 COUNTIF関数の第1引数と第2引数が同じになるので一見奇妙ですが、これにより第2引数(条件)としてC3からC12までの10個の値を一括して与え、結果を一括して得ることができます。ARRAYFORMULAは不要です。
 また、結果は省略しますが「>1」を「=1」に代えれば「居住地」の列の値が他の行と重複していない行を抽出できます。 



 次の画像では、「居住地」と「会員種別」の2つの列について、両方とも重複する行を探し、行全体を抽出しています。

f:id:accs2014:20200711135651p:plain:right:w750

 G3セルの式は次のとおりです。

=FILTER(B3:E12,COUNTIFS(C3:C12,C3:C12,D3:D12,D3:D12)>1)

 基本的には上記の例と同じで、COUNTIFの代わりにCOUNTIFSを使って比較の条件を増やしているだけです。
 これも「>1」を「=1」に代えれば重複がない行(2つの列の値が両方とも重複している行が存在しない行)を抽出できます。