365・LibreOfficeなどに関するメモ2022-12-27(Gスプレッドシート)厳格な値の重複チェックをするGoogleスプレッドシートGoogleスプレッドシートでのデータの重複チェックについてです。通常はCOUNTIF関数が用いられますが文字種の違いをほとんど区別しないので、厳密に値を比較したい場合は別のやり方を用意する必要があります。別のカウントの仕方による方法も考えられますが、ここではより実験的な方法を試してみます。COUNTIF関数による重複チェックでは大文字と小文字、全角と半角などの区別ができません。UNIQUE関数を使ってより厳格な比較ができます。重複の有無は識別できるもののカウントはできません。手順まずはCOUNTIF関数の例です。C3セルにCOUNTIF関数を使った式を入力して下方にコピーすることで、B列のそれぞれの値がいくつずつあるかカウントしています。Excelでも大文字と小文字の区別をせずカウントするなど厳密ではありませんがGoogleスプレッドシートはさらに緩く、全角と半角、ひらがなとカタカナも区別なくカウントすることがわかります。ちなみに数字に全角数字を含めると、その値だけが「2」とカウントされる謎の結果も起こります。以上を踏まえ、ここではUNIQUE関数を使った判定を行っています。長いですが次のような式を用います。これで重複ありはTRUE、重複なしがFALSEと表示されます。D3セル(下方にコピー)=ROWS(UNIQUE(B$3:B$17,,TRUE))=ROWS(UNIQUE({B$3:B$17;B3},,TRUE))考え方は次のとおりです。左側の「ROWS(UNIQUE(B$3:B$17,,TRUE))」で、範囲内にもともと1つしかない値がいくつあるか数える(UNIQUEの第3引数=TRUE)。右側の「ROWS(UNIQUE({B$3:B$17;B3},,TRUE))」で、範囲にB3セルを付け加えたときに1つしかない値がいくつになるか数える。B3セルの値がもともと他の値と重複しているならば1.と2.の結果は同じ(TRUE)、もともと重複していなかったなら2.の結果は1.より1つ減る(FALSE)。これにより重複は検知できるものの、同じものがいくつあるかのカウントはできません。重複セルに色を塗る定番ネタの色塗りです。き書式」と選択、あとはセルの書式設定の条件を「カスタム数式」として下記の式を入力すれば完成です。式は面倒ですが、UNIQUE関数はEXACT関数以上に厳格に値を比較するため効果はてきめんです。カスタム数式=ROWS(UNIQUE(B$3:B$17,,TRUE))=ROWS(UNIQUE({B$3:B$17;B3},,TRUE))空白セルを塗ってしまうのが嫌な場合は「=IF(ISBLANK(B3),FALSE,上記の式)」などとすればOKです。上記の内容の延長で実現できますが、詳しくは次の記事で紹介しています。重複していない値が全くない場合に、UNIQUE関数の結果がエラーになるため式全体もエラーになるのではないかと思われるかもしれません。GoogleスプレッドシートではこのときのROWS関数の出力が0になるので結果的にうまくいきます。式のコピーなしでTRUE/FALSEを一括取得するにはどうするかですが、次のような式になります。C3セル=BYROW(B3:B17,LAMBDA(x,ROWS(UNIQUE(B3:B17,,TRUE))=ROWS(UNIQUE({B3:B17;x},,TRUE))))B3:B17(=x)を1セルずつ取り出しては元の範囲に加え、その都度上記1.~3.の判断を繰り返しています。LETではないのでB3:B17を全部xに置き換えてはいけません。この場合、BYROWはMAPでもいいです。365はデスクトップ版、LibreOfficeは記事作成時の安定バージョンを用いた結果を示しています。サイトポリシー等についてはこちらをご覧ください。(1)検索スポンサーリンク引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。