■ スプレッドシートの重複データを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の相談や導入サポートを見たい方へ
この記事と近い作業をGoogleシートやGASで整えたい方は、Gasおじのココナラ出品一覧もご覧ください。
■ 関連サービス
GASおじのココナラ出品一覧
日々の記録、確認、通知、投稿準備などを、GoogleスプレッドシートとGASで無理なく自動化する相談ができます。