PR

【完全ガイド】スプレッドシートの空白セルや空白行を自動で削除する方法

GAS
記事内に広告が含まれています。

スプレッドシートで作業をしていると、不要な空白セルや空白行が混じってしまうことがあります。

これらの空白を放置すると、データの分析や処理に支障をきたす可能性があります。

本記事では、スプレッドシートの空白セルを効率的に削除する方法について、手動での操作からGoogle Apps Script (GAS)を使った自動化まで、わかりやすく解説します。

1. FILTER関数を使用して空白セルを削除する方法

まずは、FILTER関数を使用して、空白セルを削除する簡単な方法をご紹介します。

操作したいスプレッドシートを開き、空のセルに以下の数式を入力します。

=FILTER(元の範囲, 元の範囲<>"")

<>は「等しくない」を意味する演算子、""は空の文字列を表します。

したがって、元の範囲<>""は「元の範囲の各セルが空でない」という条件を表現しています。

そして、空でないセルに対してはTRUE、空のセルに対してはFALSEを返します。

FILTER関数では、この条件がTRUEとなるセルのみを抽出するため、元の範囲から空白セルを除いたデータが得られます。

FILTER関数を使用した例

例として、以下のデータをA1:D6セルの範囲に挿入し、空白セルを削除していきます。

名前年齢職業メモ
山田太郎25エンジニア新入社員
部署異動予定
佐藤花子30デザイナー
鈴木一郎40マネージャー
スプレッドシートの空白セル削除のサンプルデータ


空白セルを削除するためには、空のセルにFILTER関数を入力する必要があります。

FILTERの範囲には、単一行か単一列を指定する必要があるため、今回は空のセルA10:D10の範囲に下記の数式を入力します。

A10B10C10D10
=FILTER(A1:A6, A1:A6<>"")=FILTER(B1:B6, B1:B6<>"")=FILTER(C1:C6, C1:C6<>"")=FILTER(D1:D6, D1:D6<>"")


FILTER関数をスプレッドシートのA10:D10セルの範囲に実際に入力すると、以下のようになります。

空白セルのフィルター結果

FILTER関数により、元の範囲A1:D6のデータから空白セルを削除したデータを、A10:D13の範囲に表示することができています。

FILTER関数を利用することで、効率的なデータ抽出をリアルタイムで行うことができ、複雑な条件設定にも簡単に対応することができます。

2. GASを使って空白行を自動で削除する方法

Google Apps Script (GAS)を使用することで、空白行の削除を自動化することができます。

まず、スプレッドシートのメニューバーの「拡張機能」を左クリックし、「Apps Script」を選択します。

スプレッドシートの「Apps Script」を左クリックする

本項でも前項と同様に、下記のサンプルデータをA1:D6セルの範囲に挿入して使用しています。

名前年齢職業メモ
山田太郎25エンジニア新入社員
部署異動予定
佐藤花子30デザイナー
鈴木一郎40マネージャー



「Apps Script」を選択すると、スクリプトエディタが新しいタブで開きます。
元から入力されているfunction myFunction() {}は削除します。

GASエディタからmyFunction()を削除


以下のスクリプトをコピーし、スクリプトエディタに貼り付け、プロジェクトを保存します。

function deleteEmptyRows() {
  // アクティブなシートを取得
  var sheet = SpreadsheetApp.getActiveSheet();
  
  // シート内のデータが存在する範囲を取得
  var dataRange = sheet.getDataRange();
  
  // データ範囲内の値を2次元配列として取得
  var values = dataRange.getValues();
  
  // 配列を下から上に向かってループ
  for (var i = values.length - 1; i >= 0; i--) {
    // 現在の行のすべてのセルが空白かどうかをチェック
    if (values[i].every(function(cell) { return cell === ""; })) {
      // 空白行を削除
      sheet.deleteRow(i + 1);
    }
  }
}


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

deleteEmptyRowsを実行する


スクリプトを実行すると、スプレッドシートの空白行が削除されます。

3. GASを使って空白セルを自動で削除する方法

Google Apps Script (GAS)を使用して、空白セルの削除を自動化することもできます。

以下のスクリプトを使用すると、スプレッドシートの空白セルを削除後、既存のセルをに移動するという処理を自動で実行できます。

function deleteEmptyCellsAndShiftUp() {
  // アクティブなシートを取得
  var sheet = SpreadsheetApp.getActiveSheet();
  // シート内のデータ範囲を取得
  var dataRange = sheet.getDataRange();
  // データ範囲の行数を取得
  var numRows = dataRange.getNumRows();
  // データ範囲の列数を取得
  var numCols = dataRange.getNumColumns();

  // 各列に対してループを実行
  for (var col = 1; col <= numCols; col++) {
    // 現在の列の範囲を取得
    var columnRange = sheet.getRange(1, col, numRows, 1);
    // 列の値を2次元配列として取得
    var values = columnRange.getValues();
    // 空でないセルだけをフィルタリング
    var newValues = values.filter(function(cell) {
      return cell[0] !== "";
    });
    
    // フィルタリングされた値を書き込むための新しい範囲を取得
    var newColumnRange = sheet.getRange(1, col, newValues.length, 1);
    // フィルタリングされた値を書き込み
    newColumnRange.setValues(newValues);
    
    // 元の行数より少ない場合、残りの部分をクリア
    if (newValues.length < numRows) {
      sheet.getRange(newValues.length + 1, col, numRows - newValues.length, 1).clear();
    }
  }
}

スクリプトを実行すると、空白セルを削除後、既存のセルが上に移動していることが確認できます。

スプレッドシートの空白セルを削除後、既存のセルをに移動する処理を実行したい場合は、下記のスクリプトで自動化できます。

function deleteEmptyCellsAndShiftLeft() {
  // アクティブなシートを取得
  var sheet = SpreadsheetApp.getActiveSheet();
  
  // シート内のデータ範囲を取得
  var dataRange = sheet.getDataRange();
  
  // データ範囲の行数を取得
  var numRows = dataRange.getNumRows();
  
  // データ範囲の列数を取得
  var numCols = dataRange.getNumColumns();

  // 各行に対してループを実行
  for (var row = 1; row <= numRows; row++) {
    // 現在の行の範囲を取得
    var rowRange = sheet.getRange(row, 1, 1, numCols);
    
    // 行の値を2次元配列として取得し、1次元配列に変換
    var values = rowRange.getValues()[0];
    
    // 空でないセルだけをフィルタリング
    var newValues = values.filter(function(cell) {
      return cell !== "";
    });
    
    // フィルタリング後に値が残っている場合のみ、新しい値を書き込む
    if (newValues.length > 0) {
      var newRowRange = sheet.getRange(row, 1, 1, newValues.length);
      newRowRange.setValues([newValues]);
    }
    
    // 元の列数より少ない場合、残りの部分をクリア
    if (newValues.length < numCols) {
      sheet.getRange(row, newValues.length + 1, 1, numCols - newValues.length).clear();
    }
  }
}

4. まとめ

スプレッドシートの空白行や空白セルを自動で削除できると、データの整理や分析が容易になります。

今回ご紹介したFILTER関数やGASを活用することで、処理を自動化し、効率的なデータ管理を行うことができます。

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

コメント

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