【コピペでOK】Googleスプレッドシートの重複チェックを自動化!データクレンジングでミスを撲滅

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

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

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

  • 今すぐ重複を何とかしたい! という方は、【解決フロー】で紹介するコピペOKのスプレッドシートを使えば、ボタン一つで解決できます。
  • 仕組みや他の方法も知りたい! という方は、【詳しく知りたい方へ】で、関数の使い方からGASによる自動化の仕組みまで、ステップバイステップで詳しく解説します。

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

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

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

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

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

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

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

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

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

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

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

Step1:事前準備

1. 対象データの用意

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

2. スプレッドシートのコピー

データ重複クレンジングスプレッドシートを開き、コピーを作成してください。

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 と提携したりするものではありません。