スプレッドシートの重複データをGASで整理|特定データだけを削除

スプレッドシートのデータを整理する際に、特定のワードのある重複行だけを削除したいということはありませんか?

メニューの「データクリーンアップ」機能でも重複行を削除できますが、特定のワードに限定して行うには手間がかかります。

このような場合、Google Apps Script(GAS)を使うことで、特定の条件に基づいた重複削除が簡単にできます。

そこで今回はGASを使用して、スプレッドシート内で特定のワードに限定した重複削除を行う方法をご紹介します。

この方法を使えば、柔軟で効率的なデータ整理が可能になります。

目次

完成イメージ

重複データ削除前

重複データ削除後

  • 特定のワードに限定して重複行を削除
    • 対象の列を指定
    • 特定のキーワードが入力されたデータの重複行を削除

上の画像では、B列の都道府県に重複するデータがいくつかありますが、例えば”北海道”で重複するデータのみ削除に限定できます。

この方法を使うことで、特定のキーワードに絞ったデータ処理ができます。

手順

STEP
スプレッドシートを開く

重複データを削除したいシートを開きます。

今回の例ではB列の「北海道」で重複するデータ行を削除とします

STEP
GASエディタを開く

Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。

STEP
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]); // スプレッドシートの行を削除
  }
}
スクリプトの説明
STEP
スクリプトを保存

スクリプトを書いたら、名前を付けて保存します。

(例:「重複データ削除」)

STEP
スクリプトを実行

スクリプトを実行します。

初めてそのスクリプトを実行する場合は権限の確認が必要です。

そのため、『権限を確認』を押します。

許可の詳細手順

「詳細」をクリックします。

無題のプロジェクト(安全ではないページ)に移動」をクリックします。

許可」をクリックします。

STEP
対象の列を入力

スクリプト実行後にスプレッドシートの画面に戻ると、対象の列を入力する欄が表示されます。

ここに対象の列を入力し、OKをクリックします。(全角、半角どちらも可)

入力例:B

STEP
重複削除したいキーワードを入力

続いて、重複削除したいキーワードを入力し、OKをクリックします。

入力例:北海道

STEP
重複するデータ行が削除される

実行完了すると、重複データ行が削除されます。

まとめ

今回の記事では、Google Apps Script(GAS)を使って特定のワードに限定して重複を削除する方法をご紹介しました。

GASを使うことで、通常の重複削除機能にはない柔軟なデータ整理が可能です。

また、このようなスクリプトを繰り返し実行する場合は、マクロインポートを使うと簡単に実行できて便利です。

弊社では、Google Apps Script(GAS)を活用した業務効率化のサポートを提供しております。

GASのカスタマイズやエラー対応にお困りの際は、ぜひお気軽にご相談ください。

また、ITツールの導入支援やIT導入補助金の申請サポートも行っております。

貴方の業務改善を全力でサポートいたします。

お問い合わせはこちら

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次