スプレッドシートの重複データをGASで整理|特定データだけを削除
スプレッドシートのデータを整理する際に、特定のワードのある重複行だけを削除したいということはありませんか?
メニューの「データクリーンアップ」機能でも重複行を削除できますが、特定のワードに限定して行うには手間がかかります。
このような場合、Google Apps Script(GAS)を使うことで、特定の条件に基づいた重複削除が簡単にできます。
そこで今回はGASを使用して、スプレッドシート内で特定のワードに限定した重複削除を行う方法をご紹介します。
この方法を使えば、柔軟で効率的なデータ整理が可能になります。
完成イメージ
重複データ削除前
重複データ削除後
- 特定のワードに限定して重複行を削除
- 対象の列を指定
- 特定のキーワードが入力されたデータの重複行を削除
上の画像では、B列の都道府県に重複するデータがいくつかありますが、例えば”北海道”で重複するデータのみ削除に限定できます。
この方法を使うことで、特定のキーワードに絞ったデータ処理ができます。
手順
重複データを削除したいシートを開きます。
今回の例ではB列の「北海道」で重複するデータ行を削除とします
Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。
function myFunction(){
}
が最初から入っているため、消去して以下のスクリプトを貼り付けます。
function removeSpecificDuplicates() {
var ui = SpreadsheetApp.getUi();
// ユーザーに対象の列の入力を促すプロンプトを表示し、「OK」と「キャンセル」のボタンを設定
var columnResponse = ui.prompt(
'重複を削除したい対象の列を入力してください(例: A, B, C):',
ui.ButtonSet.OK_CANCEL);
// キャンセルボタンが選択された場合の処理
if (columnResponse.getSelectedButton() == ui.Button.CANCEL) {
ui.alert('操作がキャンセルされました。');
return;
}
// ユーザーに削除対象のキーワードを入力させるプロンプトを表示し、「OK」と「キャンセル」のボタンを設定
var keywordResponse = ui.prompt(
'重複を削除したいキーワードを入力してください:',
ui.ButtonSet.OK_CANCEL);
// キャンセルボタンが選択された場合の処理
if (keywordResponse.getSelectedButton() == ui.Button.CANCEL) {
ui.alert('操作がキャンセルされました。');
return;
}
// 全角英字を半角英字に変換する関数
function toHalfWidth(str) {
return str.replace(/[A-Za-z]/g, function(s) {
return String.fromCharCode(s.charCodeAt(0) - 65248);
});
}
// ユーザーから入力された列情報を全角から半角化し大文字に変換
var columnInput = toHalfWidth(columnResponse.getResponseText().toUpperCase());
var keyword = keywordResponse.getResponseText();
// アクティブなスプレッドシートを取得
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// 対象の列インデックスを取得(列名を数値に変換)
var columnIndex = columnInput.charCodeAt(0) - 'A'.charCodeAt(0);
// データ範囲を取得し、2次元配列としてデータを取得
var data = sheet.getDataRange().getValues();
var seen = new Set(); // 重複検出を行うためのセット
var rowsToRemove = []; // 削除対象としてマークする行番号
// データを行ごとに処理
for (var i = 0; i < data.length; i++) {
var row = data[i];
var cellValue = row[columnIndex]; // 指定された列の値を取得
// キーワードが含まれているか確認
if (cellValue != null && cellValue.toString().includes(keyword)) {
if (seen.has(cellValue)) {
rowsToRemove.push(i + 1); // 削除マーク
} else {
seen.add(cellValue); // 初めてのエントリを追加
}
}
}
// 上から順に行削除を実装
rowsToRemove.reverse(); // 下から削除するために配列の順序を反転
for (var i = 0; i < rowsToRemove.length; i++) {
sheet.deleteRow(rowsToRemove[i]); // スプレッドシートの行を削除
}
}
スクリプトの説明
スクリプトを書いたら、名前を付けて保存します。
(例:「重複データ削除」)
スクリプトを実行します。
初めてそのスクリプトを実行する場合は権限の確認が必要です。
そのため、『権限を確認』を押します。
許可の詳細手順
「詳細」をクリックします。
「無題のプロジェクト(安全ではないページ)に移動」をクリックします。
「許可」をクリックします。
スクリプト実行後にスプレッドシートの画面に戻ると、対象の列を入力する欄が表示されます。
ここに対象の列を入力し、OKをクリックします。(全角、半角どちらも可)
入力例:B
続いて、重複削除したいキーワードを入力し、OKをクリックします。
入力例:北海道
実行完了すると、重複データ行が削除されます。
まとめ
今回の記事では、Google Apps Script(GAS)を使って特定のワードに限定して重複を削除する方法をご紹介しました。
GASを使うことで、通常の重複削除機能にはない柔軟なデータ整理が可能です。
また、このようなスクリプトを繰り返し実行する場合は、マクロインポートを使うと簡単に実行できて便利です。
弊社では、Google Apps Script(GAS)を活用した業務効率化のサポートを提供しております。
GASのカスタマイズやエラー対応にお困りの際は、ぜひお気軽にご相談ください。
また、ITツールの導入支援やIT導入補助金の申請サポートも行っております。
貴方の業務改善を全力でサポートいたします。
コメント