【コピペでOK】Googleスプレッドシートの重複チェックを自動化!データクレンジングでミスを撲滅(そのまま使える無料テンプレート配布)

アイキャッチ画像 自動化事例

「同じお客様に、別々の営業担当がアプローチしてしまった…」
「DMを送ったら、同じ内容のものが複数届いているとクレームが来た…」
このようなヒヤッとする経験、ありませんか?

この記事ではGoogleスプレッドシートを使って、誰でも簡単にデータ重複を確認し、整理(クレンジング)する方法を、初心者の方にも分かりやすく解説します。

今すぐ重複を何とかしたい! という方は、【解決フロー】で紹介する「コピペOKの重複チェック用スプレッドシート(テンプレート)」を使えば、ボタン一つで解決できます。
 ※あわせて、この記事で使うテンプレートを無料配布しています。
  下のフォーム送信後の自動返信メールで、テンプレートの受け取りいただけます。

【詳しく知りたい方へ】では、関数の使い方からGASによる自動化の仕組みまで、ステップバイステップで詳しく解説します。

この記事を読めば、面倒な重複チェック作業から解放され、常にクリーンなデータを保てるようになります。

無料配布:重複チェック&重複除外リスト作成テンプレート

重複チェックを「手作業ゼロ」にするためのスプレッドシートを無料配布しています。
プログラムを書く必要はなく、コピーしてすぐに利用可能です。

【テンプレートでできること】
・行単位で重複を自動判定し、2件目以降に「重複」と表示
・重複を除外した“ユニークなリスト”を別シートへ自動出力
・実行ボタン1つで、貼り付け→判定→出力まで完了

以下のフォームから、今すぐテンプレートをお受け取りください。

    はじめに:なぜデータクレンジング(重複チェック)が必要なのか?

    そもそも、なぜデータの重複チェックが必要なのでしょうか。
    それは、データの品質が、ビジネスの成果に直結するからです。

    データクレンジングとは、データの中から「重複」「表記ゆれ」「誤入力」などを見つけ出し、修正・削除することで、データの品質を高める作業のことです。

    例えば、顧客リストに重複があると、

    • 無駄なコストが発生する(同じ相手に何度もDMを送ってしまう)
    • 顧客満足度が低下する(しつこい営業だと思われてしまう)
    • 正確な営業分析ができない(顧客数を実際より多く見積もってしまう)

    といった様々な問題が発生します。

    定期的にデータクレンジングを行い、データを常に「正しく」「使える」状態に保つことが、ビジネスを成長させる上で非常に重要です。

    【解決フロー】コピペで使える!重複データクレンジングGAS

    ここからは、実際に課題を解決するための手順です。
    今すぐ解決したい方は、以下の手順を使えばボタン一つで重複データを確認できます。

    具体的な設定方法や仕組みを知りたい方は、【詳しく知りたい方へ】に飛んでください。

    Step1:事前準備

    1.テンプレートの用意

    ページ上部のフォームからダウンロードした「データ重複クレンジングスプレッドシート」を開き、ご自身のGoogleドライブに「コピーを作成」してください。

    2. 対象データの用意

    重複チェックをしたい顧客リストなどのデータ(ExcelまたはCSV形式)をご用意ください。
    ※本記事では「データ重複クレンジングスプレッドシート」を使用します。

    Step2:対象データの更新

    コピーしたスプレッドシートの「データ入力」シートを開き、B2セルにヘッダーを、B3セル以下に準備したご自身のデータを貼り付けます。

    データ張付け案内

    Step3:変換の実行

    1. Google Apps Script(GAS)の実行許可(初回のみ)

    「変換開始」ボタンをクリック後、
    Google Apps Script(GAS)の実行許可を行います。

    変換ボタン

    2. 変換の実行

    許可後に実行すると、以下のように結果が出力されます。

    • A列: 重複しているデータ(2件目以降)の行に「重複」と表示されます。
    • 「重複除外リスト」シート: 元のデータから重複を除いた、ユニークなデータリストが自動で作成されます。
    GAS実行後、重複と表示されている様子
    重複除外リストに更新されたデータ

    これで、面倒な重複チェックは完了です。

    【詳しく知りたい方へ】重複チェックの様々な方法

    ここからは、「なぜこれで重複チェックができるの?」「他の方法も知りたい」という方向けに、より詳しく解説していきます。

    レベル1:標準機能でサクッと重複チェック

    まずは、GASや難しい関数を使わずに、スプレッドシートの標準機能だけで重複を見つける簡単な方法を2つご紹介します。
    ※ここでは、特定の列(例:A列のメールアドレス)が重複しているデータを見つけることを前提として解説します。

    方法1:重複データに「色を付ける」

    重複しているデータを含む行全体に色を付けて、視覚的に分かりやすくする方法です。元のデータは削除されません。

    1. 色を付けたい範囲(例:A列からC列)を選択します。
    2. メニューの「表示形式」>「条件付き書式」を選択します。
    3. 右側に表示された設定画面で、以下の通り設定します。
      • 範囲に適用: A:C (先ほど選択した範囲)
      • セルの書式設定の条件: 「カスタム数式」を選択
      • 値または数式: =COUNTIF($A:$A, $A1)>1
      • 書式設定スタイル: 任意の色(例:背景色を薄い赤にする)
    4. 「完了」をクリックします。
    条件付き書式設定欄
    赤くハイライトされた重複データ
    同じメールアドレスが2つ以上ある行が、赤色になった

    これで、A列(メールアドレス)が重複している全ての行に色が付きます。

    【関数の解説】=COUNTIF($A:$A, $A1)>1

    これは、「A列全体の中に、A1セルと同じ値が1個より多く(つまり2個以上)ありますか?」という意味の数式です。

    • COUNTIF(範囲, 条件): 指定した範囲の中から、条件に一致するセルの個数を数える関数です。
    • $A:$A: 範囲をA列全体に固定しています。$マークは「絶対参照」といい、数式を他のセルにコピーしてもこの部分がずれないようにする印です。
    • $A1: 条件となるセルです。行番号の前の$は付けていないため、2行目、3行目とチェックが進むにつれて$A2, $A3と変化していきます。
    • >1: COUNTIFで数えた個数が1より大きい(=重複している)場合に、書式を適用するという条件です。

    方法2:重複データを「削除する」

    重複しているデータを完全に削除する方法です。
    ※この操作は元に戻せないので、必ずシートをコピーしてから実行してください。

    1. 重複を削除したいデータ範囲を選択します。
    2. メニューの「データ」>「データのクリーンアップ」>「重複を削除」を選択します。
    3. ポップアップが表示されたら、「データにヘッダー行が含まれている」にチェックを入れます。
    4. 重複を判断する基準となる列(例:「メールアドレス」)にチェックを入れ、「重複を削除」をクリックします。
    重複削除の場所
    重複削除の設定

    これで、指定した列の値が重複している行のうち、2件目以降のデータが削除されます。

    レベル2:関数を使いこなして重複処理

    次に、関数を使って、元のデータを保持したまま重複を除いたリストを作成する方法です。

    方法3:重複を除いた「ユニークなリストを作成」

    UNIQUE(ユニーク)関数を使うと、指定した範囲から重複する行を取り除いた、一意な(ユニークな)値のリストを簡単に作成できます。

    1. 結果を表示させたいセル(例:別シートのA1セル)を選択します。
    2. そのセルに、以下の数式を入力します。
    =UNIQUE(データ入力!A:C)
    UNIQUE関数で重複がなくなった様子

    【関数の解説】=UNIQUE(範囲)

    • UNIQUE(範囲): 指定した範囲から、重複しないユニークなデータだけを抽出する関数です。
    • データ入力!A:C: 「データ入力」という名前のシートの、A列からC列までの範囲を指定しています。

    この方法は、元のデータを直接編集しないため、安全で最もおすすめな方法の一つです。

    レベル3:GASで重複チェック

    最後に、【解決フロー】で提供したスプレッドシートに組み込まれているGoogle Apps Script(GAS)の仕組みを解説します。
    GASを使うと、これまで紹介したような操作をプログラムで自動化でき、ボタン一つで実行できるようになります。

    以下が、実際にスプレッドシートに書かれているコードです。

    // ボタンクリックで実行されるメインの関数
    function checkDuplicates() {
      const ui = SpreadsheetApp.getUi();
      const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('データ入力');
      if (!sheet) {
        ui.alert('「データ入力」シートが見つかりません。');
        return;
      }
    
      // 最終行と最終列を取得して、データ範囲を特定
      const lastRow = sheet.getLastRow();
      // データが3行目から始まると想定(ヘッダーを除く)
      if (lastRow < 3) {
        ui.alert('チェック対象のデータがありません。(B3セル以降にデータを貼り付けてください)');
        return;
      }
      
      // B列からデータが始まると想定
      const startCol = 2; 
      const lastCol = sheet.getLastColumn();
      const numCols = lastCol - startCol + 1;
    
      // データがB列にない場合
      if (numCols <= 0) {
        ui.alert('チェック対象のデータがありません。(B3セル以降にデータを貼り付けてください)');
        return;
      }
    
      // B3セルから最終行・最終列までのデータを全て取得
      const dataRange = sheet.getRange(3, startCol, lastRow - 2, numCols);
      const values = dataRange.getValues();
      
      // A列の既存の「重複」表示をクリア
      sheet.getRange(3, 1, lastRow - 2, 1).clearContent();
    
      const seen = {};      // チェック済みの行データを記録するオブジェクト
      const uniques = [];    // 重複していない行データを記録する配列
    
      // 取得したデータを1行ずつループしてチェック
      for (let i = 0; i < values.length; i++) {
        // 行データ全体を文字列に変換して、重複判定のキーとする
        const key = JSON.stringify(values[i]); 
    
        // seenオブジェクトにキーが存在するかチェック
        if (seen[key]) {
          // 存在すれば重複とみなし、A列に「重複」と記入
          sheet.getRange(i + 3, 1).setValue('重複');
        } else {
          // 存在しなければ初めてのデータなので、seenオブジェクトに記録し、ユニークリストに追加
          seen[key] = true;
          uniques.push(values[i]);
        }
      }
      
      // ヘッダー行(2行目)のデータを取得
      const header = sheet.getRange(2, startCol, 1, numCols).getValues();
    
      // 「重複除外リスト」シートにユニークなリストを出力
      updateUniqueListSheet(uniques, header);
    
      ui.alert('重複チェックが完了しました。');
    }
    
    // 重複除外リストを更新する関数
    function updateUniqueListSheet(uniqueData, header) {
      const ss = SpreadsheetApp.getActiveSpreadsheet();
      let uniqueSheet = ss.getSheetByName('重複除外リスト');
      
      // シートがなければ新しく作成
      if (!uniqueSheet) {
        uniqueSheet = ss.insertSheet('重複除外リスト');
      }
    
      // シートの内容をクリア
      uniqueSheet.clear();
      
      // ヘッダーを書き込む
      uniqueSheet.getRange(1, 1, 1, header[0].length).setValues(header);
      
      // データがなければ終了
      if (uniqueData.length === 0) {
          return;
      }
    
      // ユニークなデータを書き込む
      uniqueSheet.getRange(2, 1, uniqueData.length, uniqueData[0].length).setValues(uniqueData);
    }

    コードの主な処理の流れ

    checkDuplicates()関数:

    • これは、シート上の「重複チェック実行」ボタンに割り当てられている関数です。
    • データの取得: getSheetByName()で「データ入力」シートを指定し、getRange()とgetValues()を使って、B3セル以降のデータを全て取得します。
    • ループ処理: forループを使い、取得したデータを1行ずつ順番にチェックしていきます。
    • 重複判定: seenという空のオブジェクト(データを格納できる箱)を用意します。ループの中で、行全体のデータをJSON.stringify()という命令で一つの文字列に変換し、それをkeyとします。そしてseenの中にそのkeyが既にあるか確認します。
      • なければ(初めてのデータ): seenにそのkeyを記録し、その行データをuniquesという配列(リスト)に追加します。
      • あれば(重複データ): その行は重複であると判断し、setValue(‘重複’)を使ってA列に「重複」という文字を書き込みます。
    • 結果の出力: updateUniqueListSheet()関数を呼び出し、「重複除外リスト」シートにuniques配列の中身(重複を除いたデータ)を出力します。

    まとめ

    今回は、Googleスプレッドシートでデータの重複をチェックするための方法を、簡単なものからGASを使った自動化まで、3つのレベルに分けて解説しました。

    • レベル1:標準機能でサクッとチェック(条件付き書式、重複の削除)
    • レベル2:関数を使いこなして処理(UNIQUE関数)
    • レベル3:GASで重複チェック

    データは、ビジネスにおける大切な資産です。しかし、手入れをしなければその価値は半減してしまいます。まずは【解決フロー】のコピペ用シートから試してみて、データクレンジングの第一歩を踏み出してみてください。そして、慣れてきたら関数やGASの仕組みも理解し、自社の業務に最適なデータ管理の仕組みを構築していきましょう。

    本記事で紹介した手順をすぐに試せる「重複チェック&重複除外リスト作成テンプレート(スプレッドシート)」を無料で配布しています。
    ▶ ページ上部のフォームからテンプレートを受け取る(無料)

    「重複の判定基準を“メールアドレス列だけ”にしたい」
    「名寄せ(表記ゆれ)も含めて一括で整備したい」
    など、運用に合わせたカスタマイズが必要な場合は、【お問い合わせフォーム】からお気軽にご相談ください。

    ※Googleサービスは、Google LLC の商標であり、この記事はGoogleによって承認されたり、Google と提携したりするものではありません。