【初心者向け】GASでシート内の重複行を自動削除する方法

  • URLをコピーしました!

Googleスプレッドシートの重複データを手動で削除するのは面倒。GAS(Google Apps Script)を使えば、自動で重複行を削除できる!本記事では、初心者でも簡単にできるGASのコードを解説し、トリガー設定や応用例も紹介。効率化を目指す方必見!

目次

GASとは?

GAS(Google Apps Script)は、Googleが提供するクラウド上のスクリプト言語で、JavaScriptベースで動作します。Googleスプレッドシート、Googleドライブ、GmailなどのGoogleサービスを自動化できるのが特徴です。

例えば、スプレッドシートのデータを整理したり、メールの送信を自動化したりすることができます。今回紹介するのは「スプレッドシートの重複データを自動削除するスクリプト」です。これを使えば、データ整理の手間を省けます。


今回のコードで実現できる機能

今回のスクリプトを実行すると、以下のようなことが可能になります。

  • 指定したスプレッドシートの「重複行を自動的に削除」
  • トリガーを設定すれば「定期的に重複削除」
  • 人為的なミスを防ぎ「データの一貫性を保つ」

特に、大量のデータを扱う場面では手動で削除するより圧倒的に効率的です。


今回のコードで必要な準備

このスクリプトを実行するためには、GoogleスプレッドシートとGASの準備が必要です。

ステップ1: スプレッドシートの作成

  1. Googleスプレッドシートを開く
  2. 「Data」という名前のシートを作成し、データを入力

ステップ2: GASエディタを開く

  1. スプレッドシートの [拡張機能] → [Apps Script] をクリック
  2. エディタが開くので、次のコードをコピー&ペースト

GASのスクリプト解説

function removeDuplicateRows() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data");
  var data = sheet.getDataRange().getValues();
  var unique = [];
  var output = [];
  data.forEach(function(row) {
    var key = row.join("|");
    if (!unique.includes(key)) {
      unique.push(key);
      output.push(row);
    }
  });
  sheet.clearContents();
  sheet.getRange(1, 1, output.length, output[0].length).setValues(output);
}

コードの解説

  1. SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data")
    • スプレッドシートの「Data」シートを取得
  2. getDataRange().getValues()
    • すべてのデータを取得
  3. row.join("|")
    • 行ごとに結合して一意のキーを作成
  4. unique.includes(key)
    • すでに処理済みのデータならスキップ
  5. sheet.clearContents()
    • シートの内容をクリア
  6. sheet.getRange(1, 1, output.length, output[0].length).setValues(output)
    • 重複を除いたデータを再度シートに書き込み

今回のコードでのトリガーの設定

せっかくなら手動実行ではなく「自動実行」したいですよね?
GASには 時間ベースのトリガー という便利な機能があります。

トリガーの設定手順

  1. Apps Scriptエディタの左側メニュー で「トリガー」をクリック
  2. 「トリガーを追加」を選択
  3. 関数を removeDuplicateRows に設定
  4. 実行タイミングを「時間ベースのトリガー」で「1時間おき」などに設定
  5. 保存して完了!

初回実行時の承認手順について

初回実行時にはGoogleの承認が必要になります。

承認手順

  1. スクリプトを実行すると「承認が必要」と表示される
  2. 「許可を確認」ボタンをクリック
  3. Googleアカウントを選択し、「このアプリは確認されていません」と表示された場合
    • 「詳細」→「安全でないページに移動」 をクリック
  4. 「許可」ボタンを押す

応用例・カスタマイズ

今回のスクリプトは「単一シート」の重複を削除するものですが、カスタマイズすればさらに便利になります。

1. 複数シートの重複削除

全シートの重複を削除したい場合、getSheetByName("Data")getSheets() に変更すれば対応可能。

function removeDuplicateRowsFromAllSheets() {
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  sheets.forEach(sheet => {
    var data = sheet.getDataRange().getValues();
    var unique = [];
    var output = [];
    data.forEach(function(row) {
      var key = row.join("|");
      if (!unique.includes(key)) {
        unique.push(key);
        output.push(row);
      }
    });
    sheet.clearContents();
    sheet.getRange(1, 1, output.length, output[0].length).setValues(output);
  });
}

2. 指定列で重複チェック

特定の列の値が重複している場合に削除したい場合は、次のように修正。

function removeDuplicateByColumn(columnIndex) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data");
  var data = sheet.getDataRange().getValues();
  var unique = [];
  var output = [];
  data.forEach(function(row) {
    var key = row[columnIndex - 1]; // 1列目なら index=0
    if (!unique.includes(key)) {
      unique.push(key);
      output.push(row);
    }
  });
  sheet.clearContents();
  sheet.getRange(1, 1, output.length, output[0].length).setValues(output);
}

FAQセクション

Q: GASを実行したのにデータが消えない?
A: シート名が間違っていないか確認してください。デフォルトでは “Data” ですが、別のシート名なら変更が必要です。

Q: トリガーを設定しても動作しない?
A: Googleの無料プランでは一定回数の制限があるため、ログを確認してください。

Q: GASで削除前にバックアップを取る方法は?
A: SpreadsheetApp.create() を使えば、新しいスプレッドシートにデータを保存できます。


まとめ

GASを活用すれば、スプレッドシートの重複データを簡単に削除できます。

  • 基本のコードで重複削除
  • トリガーを使って自動化
  • 応用すれば複数シートや特定列の重複削除も可能

業務効率を上げたい人には必須のスクリプトです!ぜひ活用してみてください。

  • URLをコピーしました!
目次