スプレッドシートの重複データをGASで自動削除する

GASスプレッドシートデータ管理
スプレッドシートの重複データをGASで自動削除するのサムネイル

スプレッドシートの重複データをGASで自動削除するメリット

どうも、GASおじです。スプレッドシートのデータ管理、特に重複データの処理に困っている中小企業の経営者さんやフリーランスの方は多いはず。重複が放置されると、売上分析や顧客管理の正確性が落ちてしまいますよね。

そこで、Google Apps Script(以下GAS)を使って、手動での削除ミスを防ぎつつ、効率的に重複を除去する方法を解説します。おじさんのノウハウを活かして、既存データをその場で消さずに、新規シートかファイルに結果を書き出す安全設計にこだわりました。

GASはGoogleアカウントの利用枠内で実行可能で、追加の専用SaaS料金は不要。ただしquotaや実行時間の上限はあるので、その点も注意しながら使っていきましょう。


事前準備と初期設定

必要な権限

  • スプレッドシートの読み込み・書き込み権限
  • 新規スプレッドシート作成権限

これらはスクリプトを初めて実行するときに承認が求められます。安全なコードなので安心してください。

個人情報の取り扱いについて

GASスクリプトはGoogleのセキュリティ基準に準拠していますが、念のため処理対象のデータに個人情報が含まれる場合は、アクセス権限を管理し、権限のあるユーザーのみが利用できる環境で運用してください。

installable triggerの設定(任意)

定期的に重複チェック・除去を自動化したいなら、GASのinstallable trigger(例えば毎日午前2時に実行)を設定すると便利です。手動での実行も可能です。


重複データを新規シートに書き出すGASサンプルコード

以下のコードは、

  • 元のデータを読み込み
  • 重複を判定(1列目の値をキーに)
  • 重複を除いた結果を「重複除去_YYYYMMDD_HHmmss」という新しいシートに書き出し

という流れです。元のデータは一切編集せず、安全にバックアップが取れます。

function removeDuplicatesToNewSheet() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sourceSheet = ss.getSheetByName('元データ'); // 処理対象のシート名を指定
  if (!sourceSheet) {
    SpreadsheetApp.getUi().alert('元データシートが見つかりません。');
    return;
  }

  const data = sourceSheet.getDataRange().getValues();
  if (data.length < 2) {
    SpreadsheetApp.getUi().alert('元データがありません。');
    return;
  }

  // ヘッダーを保持しつつ、1列目をキーに重複を除去
  const header = data[0];
  const uniqueMap = new Map();
  for (let i = 1; i < data.length; i++) {
    const key = data[i][0];
    if (!uniqueMap.has(key)) {
      uniqueMap.set(key, data[i]);
    }
  }

  const uniqueData = [header];
  uniqueMap.forEach(row => uniqueData.push(row));

  // 新しいシート名を日時付きで作成
  const timestamp = Utilities.formatDate(new Date(), ss.getSpreadsheetTimeZone(), 'yyyyMMdd_HHmmss');
  const newSheetName = `重複除去_${timestamp}`;
  const newSheet = ss.insertSheet(newSheetName);

  // バッチ書き込みで高速化
  newSheet.getRange(1, 1, uniqueData.length, uniqueData[0].length).setValues(uniqueData);

  SpreadsheetApp.getUi().alert(`重複を除去したシート「${newSheetName}」を作成しました。`);
}

バックアップと復元の手順

新しいシートに結果を出力するため、元データはそのまま保持されます。万一トラブルがあっても、

  • 元の「元データ」シートを参照すれば元通り
  • 新規シートを削除すれば処理前の状態に戻る

ので安心です。

もし新規シートを別ファイルにしたい場合は、SpreadsheetApp.create()を使って新ファイルを作成し、そこに書き出す方法もあります。


コスト削減シミュレーション(仮定)

たとえば、手動で1時間かけて重複チェックをしていた作業が、

  • GASによる自動化で10分に短縮できた場合

時間あたりの人件費を2,500円と仮定すると、

(60分 - 10分) ÷ 60分 × 2,500円 = 約2,083円のコスト削減/回

月に10回実施すれば約20,830円の節約に。GASはGoogleアカウントの利用枠内で追加の専用SaaS料金なしなので、コスト面でもお得です。


まとめとメンバーシップのご案内

今回紹介したGASスクリプトは、

  • 既存データを直接編集・削除せず安全
  • 入力検証も最低限実装
  • 新規シートに結果を書き出すことでバックアップも兼ねる

というポイントを押さえてあります。

GASは使いこなせば小さな業務効率化から大きなコスト削減まで期待できる強力なツール。もっと多彩なツールを使いたい方は、ぜひGASおじラボのメンバーシップをご検討ください。

GASおじラボで500ツール使い放題 →