Googleスプレッドシートの重複データを手動で削除するのは面倒。GAS(Google Apps Script)を使えば、自動で重複行を削除できる!本記事では、初心者でも簡単にできるGASのコードを解説し、トリガー設定や応用例も紹介。効率化を目指す方必見!
GASとは?
GAS(Google Apps Script)は、Googleが提供するクラウド上のスクリプト言語で、JavaScriptベースで動作します。Googleスプレッドシート、Googleドライブ、GmailなどのGoogleサービスを自動化できるのが特徴です。
例えば、スプレッドシートのデータを整理したり、メールの送信を自動化したりすることができます。今回紹介するのは「スプレッドシートの重複データを自動削除するスクリプト」です。これを使えば、データ整理の手間を省けます。
今回のコードで実現できる機能
今回のスクリプトを実行すると、以下のようなことが可能になります。
- 指定したスプレッドシートの「重複行を自動的に削除」
- トリガーを設定すれば「定期的に重複削除」
- 人為的なミスを防ぎ「データの一貫性を保つ」
特に、大量のデータを扱う場面では手動で削除するより圧倒的に効率的です。
今回のコードで必要な準備
このスクリプトを実行するためには、GoogleスプレッドシートとGASの準備が必要です。
ステップ1: スプレッドシートの作成
- Googleスプレッドシートを開く
- 「Data」という名前のシートを作成し、データを入力
ステップ2: GASエディタを開く
- スプレッドシートの [拡張機能] → [Apps Script] をクリック
- エディタが開くので、次のコードをコピー&ペースト
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);
}
コードの解説
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data")
- スプレッドシートの「Data」シートを取得
getDataRange().getValues()
- すべてのデータを取得
row.join("|")
- 行ごとに結合して一意のキーを作成
unique.includes(key)
- すでに処理済みのデータならスキップ
sheet.clearContents()
- シートの内容をクリア
sheet.getRange(1, 1, output.length, output[0].length).setValues(output)
- 重複を除いたデータを再度シートに書き込み
今回のコードでのトリガーの設定
せっかくなら手動実行ではなく「自動実行」したいですよね?
GASには 時間ベースのトリガー という便利な機能があります。
トリガーの設定手順
- Apps Scriptエディタの左側メニュー で「トリガー」をクリック
- 「トリガーを追加」を選択
- 関数を
removeDuplicateRows
に設定 - 実行タイミングを「時間ベースのトリガー」で「1時間おき」などに設定
- 保存して完了!
初回実行時の承認手順について
初回実行時にはGoogleの承認が必要になります。
承認手順
- スクリプトを実行すると「承認が必要」と表示される
- 「許可を確認」ボタンをクリック
- Googleアカウントを選択し、「このアプリは確認されていません」と表示された場合
- 「詳細」→「安全でないページに移動」 をクリック
- 「許可」ボタンを押す
応用例・カスタマイズ
今回のスクリプトは「単一シート」の重複を削除するものですが、カスタマイズすればさらに便利になります。
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を活用すれば、スプレッドシートの重複データを簡単に削除できます。
- 基本のコードで重複削除
- トリガーを使って自動化
- 応用すれば複数シートや特定列の重複削除も可能
業務効率を上げたい人には必須のスクリプトです!ぜひ活用してみてください。