PR

【GAS】スプレッドシートで特定の文字を含むセルを自動削除する方法

【GAS】 Google スプレッドシートで特定の文字を含むセルを自動削除する方法 GAS
記事内に広告が含まれています。

Googleスプレッドシートで特定の文字列を含むセルを削除したいと思ったことはありませんか?

本記事では、Google Apps Script (GAS)を使って特定の文字を含むセルを自動的に削除する方法を詳しく解説します。

GASで特定の文字列を含むセルを削除

今回は下記の2種類のセル削除のスクリプトをご紹介します。

  1. 特定の文字列を含むセルをクリアする
  2. 特定の文字列を含むセルを削除し、上に詰める

どちらもGoogle Apps Script (GAS)を使用してスクリプトを書いていくので、まずはGoogleスプレッドシートからスクリプトエディタを開いて用意していきます。

スプレッドシートにスクリプトエディタを追加する方法

1.Google スプレッドシートを開く

まずは、Google スプレッドシートを開きます。

Google Chromeを開いて右上に表示されるGoogle アプリのアイコンを左クリックします。

そして、Google アプリ一覧から「スプレッドシート」を選択します。


下の画像のような画面に遷移するので、編集したいスプレッドシートを選択して開きます。

2.スクリプトを開く

メニューバーの「拡張機能」を左クリックし、「Apps Script」を選択します。

「Apps Script」を選択すると、スクリプトエディタが新しいタブで開きます。

特定の文字を含むセルをクリアするスクリプトの作成(方法1)

特定の文字を含むセルをクリアするスクリプトを作成します。

このスクリプトを使えば、スプレッドシート内のすべてのセルをチェックし、指定した文字列を含むセルを自動でクリアすることができます。

1.スクリプトを作成する

まず、新しいタブでスクリプトエディタが開かれたら、以下のスクリプトをコピーして貼り付け、プロジェクトを保存します。

function clearCells() {
  // アクティブなスプレッドシートを取得
  const sheet = SpreadsheetApp.getActiveSheet();
  // クリアしたいセルのキーワードをここに入力
  const  keyword = "特定のキーワード"

  // シート全体の範囲を取得
  const range = sheet.getDataRange();
  // 範囲内の全データを取得
  const values = range.getValues();

  // 範囲内のセルを1つずつチェック
  for (let i = 0; i < values.length; i++) {
    for (let j = 0; j < values[i].length; j++) {
      if (values[i][j].toString().toLowerCase().includes(keyword)) {
        // コンテンツをクリア
        sheet.getRange(i + 1, j + 1).clearContent();
      }
    }
  }
}

スクリプトでは、下記の流れで該当するセルを削除しています。

  1. SpreadsheetApp.getActiveSheet(): 現在のシートを取得
  2. sheet.getDataRange(): データ範囲を取得
  3. getValues(): 2次元配列として範囲内のデータを取得
  4. 二重ループで各セルをチェック
  5. toLowerCase(): 大文字小文字を区別せずに「cat」を検索
  6. clearContent(): 該当セルの内容をクリア
2.キーワードを設定する

スクリプト内5行目の var keyword = "特定のキーワード";keyword変数に、自分が指定したい単語を指定します。

今回は"特定のキーワード"の部分を"cat"に置き換えます。

3.スクリプトを実行する

スクリプトエディターのメニューバーで「clearCells」が選択されていることを確認し、「実行」ボタンを左クリックします。

初めて実行する際には、スクリプトに対する権限の承認が求められる場合がありますので、承認してください。

「このアプリは Google で確認されていません」と表示された場合は左下の詳細をクリックすると、「無題のプロジェクト(安全ではないページ)に移動」というリンクが表示されます。
このリンクをクリックすると次のページへ遷移できます。

4.実行結果を確認する

スクリプトが正常に実行されると、指定したキーワードを含むセルがクリアされます。

今回は"cat"を指定したので、"cat"という文字が含まれるセルが全てクリアされます。

特定の文字を含むセルを削除し、上に詰めるスクリプトの作成(方法2)

次に、特定の文字を含むセルを削除し、残りのデータを上に詰めるスクリプトをご紹介します。

このスクリプトを使えば、スプレッドシート内のすべてのセルをチェックし、指定した文字列を含むセルを自動で削除し、上に詰めることができます。

1.スクリプトを作成する

まず、新しいタブでスクリプトエディタが開かれたら、以下のスクリプトをコピーして貼り付け、プロジェクトを保存します。

function deleteCellsAndShiftUp() {
  // アクティブなスプレッドシートを取得
  const sheet = SpreadsheetApp.getActiveSheet();
  // 削除したいセルのキーワードをここに入力
  const  keyword = "特定のキーワード"


  // シート全体の範囲を取得
  const range = sheet.getDataRange();
  // 範囲内の全データを取得
  const values = range.getValues();
  // 行数を取得
  const numRows = values.length;
  // 列数を取得
  const numCols = values[0].length;

  //  各列ごとに処理
  for (let col = 0; col < numCols; col++) {
    let writeIndex = 0;
    
    // 列内の各セルを確認
    for (let row = 0; row < numRows; row++) {
      const cellValue = values[row][col];
      
      // キーワードを含まないセルの場合、writeIndexの位置に値を移動
      if (!cellValue.toString().toLowerCase().includes(keyword)) {
        if (writeIndex !== row) {
          sheet.getRange(writeIndex + 1, col + 1).setValue(cellValue);
        }
        writeIndex++;
      }
    }
    
    // 残りのセルをクリア
    if (writeIndex < numRows) {
      sheet.getRange(writeIndex + 1, col + 1, numRows - writeIndex, 1).clearContent();
    }
  }
}

スクリプトでは、下記の流れで該当するセルを削除しています。

  1. SpreadsheetApp.getActiveSheet(): 現在のシートを取得
  2. sheet.getDataRange(): データ範囲を取得
  3. getValues(): 2次元配列として範囲内のデータを取得
  4. length : データ範囲の行数、列数を取得
  5. 二重ループで各列内の各セルをチェック
  6. キーワードを含まないセルの場合、writeIndexの位置に値を移動
    sheet.getRange(): セルの範囲を指定
    setValue(): 取得した範囲に値を設定
  7. clearContent(): 残りのセルの内容をクリア
2.キーワードを設定する

スクリプト内5行目の var keyword = "特定のキーワード";keyword変数に、自分が指定したい単語を指定します。

今回は"特定のキーワード"の部分を"cat"に置き換えます。

3.スクリプトを実行する

スクリプトエディターのメニューバーで「deleteCellsAndShiftUp」が選択されていることを確認し、「実行」ボタンを左クリックします。

「deleteCellsAndShiftUp」を選択し、「実行」ボタンを左クリック
4.実行結果を確認する

スクリプトが正常に実行されると、指定したキーワードを含むセルが削除され、残りのデータは上に詰められます。

今回は"cat"を指定したので、"cat"という文字が含まれるセルが全て削除されています。

指定したキーワードを含むセルが削除され、残りのデータが上詰めされる

注意事項

  • 処理時間
    大量のデータの処理には時間がかかる場合があります。
  • データのバックアップ
    スクリプトを実行すると、元のデータが一部削除されます。
    実行前にデータのバックアップを取ることを強くお勧めします。
    自動バックアップの方法について詳しく知りたい方は、以下の記事をご覧ください。

まとめ

以上の方法で、Google Apps Script を使用して特定の文字列を含むセルを削除することができます。

Google Apps Script を活用することで、データ管理効率を大幅に向上させることができます!

ぜひ、ご自身のスプレッドシートでも試してみてください。


Google スプレッドシートで特定の文字を含む行の自動削除や、特定の文字を含まない行の自動削除に興味がある方はこちらもご覧ください!

コメント

タイトルとURLをコピーしました