「同じお客様に、別々の営業担当がアプローチしてしまった…」
「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件目以降)の行に「重複」と表示されます。
- 「重複除外リスト」シート: 元のデータから重複を除いた、ユニークなデータリストが自動で作成されます。


これで、面倒な重複チェックは完了です。
【詳しく知りたい方へ】重複チェックの様々な方法
ここからは、「なぜこれで重複チェックができるの?」「他の方法も知りたい」という方向けに、より詳しく解説していきます。
レベル1:標準機能でサクッと重複チェック
まずは、GASや難しい関数を使わずに、スプレッドシートの標準機能だけで重複を見つける簡単な方法を2つご紹介します。
※ここでは、特定の列(例:A列のメールアドレス)が重複しているデータを見つけることを前提として解説します。
方法1:重複データに「色を付ける」
重複しているデータを含む行全体に色を付けて、視覚的に分かりやすくする方法です。元のデータは削除されません。
- 色を付けたい範囲(例:A列からC列)を選択します。
- メニューの「表示形式」>「条件付き書式」を選択します。
- 右側に表示された設定画面で、以下の通り設定します。
- 範囲に適用: A:C (先ほど選択した範囲)
- セルの書式設定の条件: 「カスタム数式」を選択
- 値または数式: =COUNTIF($A:$A, $A1)>1
- 書式設定スタイル: 任意の色(例:背景色を薄い赤にする)
- 「完了」をクリックします。


これで、A列(メールアドレス)が重複している全ての行に色が付きます。
【関数の解説】=COUNTIF($A:$A, $A1)>1
これは、「A列全体の中に、A1セルと同じ値が1個より多く(つまり2個以上)ありますか?」という意味の数式です。
- COUNTIF(範囲, 条件): 指定した範囲の中から、条件に一致するセルの個数を数える関数です。
- $A:$A: 範囲をA列全体に固定しています。$マークは「絶対参照」といい、数式を他のセルにコピーしてもこの部分がずれないようにする印です。
- $A1: 条件となるセルです。行番号の前の$は付けていないため、2行目、3行目とチェックが進むにつれて$A2, $A3と変化していきます。
- >1: COUNTIFで数えた個数が1より大きい(=重複している)場合に、書式を適用するという条件です。
方法2:重複データを「削除する」
重複しているデータを完全に削除する方法です。
※この操作は元に戻せないので、必ずシートをコピーしてから実行してください。
- 重複を削除したいデータ範囲を選択します。
- メニューの「データ」>「データのクリーンアップ」>「重複を削除」を選択します。
- ポップアップが表示されたら、「データにヘッダー行が含まれている」にチェックを入れます。
- 重複を判断する基準となる列(例:「メールアドレス」)にチェックを入れ、「重複を削除」をクリックします。


これで、指定した列の値が重複している行のうち、2件目以降のデータが削除されます。
レベル2:関数を使いこなして重複処理
次に、関数を使って、元のデータを保持したまま重複を除いたリストを作成する方法です。
方法3:重複を除いた「ユニークなリストを作成」
UNIQUE(ユニーク)関数を使うと、指定した範囲から重複する行を取り除いた、一意な(ユニークな)値のリストを簡単に作成できます。
- 結果を表示させたいセル(例:別シートのA1セル)を選択します。
- そのセルに、以下の数式を入力します。
=UNIQUE(データ入力!A:C)

【関数の解説】=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 と提携したりするものではありません。