Google Apps Scriptで選択範囲の空白セルを詰めるスクリプトの作成方法

選択範囲の空白セルを詰める

Googleスプレッドシートを使用しているとセルの値を削除したあとに空白セルを詰めることがよくある。

例えばA1:A4にfoo, bar, hoge, bazの値があり、A3のhogeを削除すると空白セルになるので、空白セルを詰めてA1:A3にfoo, bar, bazが表示されるようにするなどだ。
Google Apps Scriptで選択範囲の空白セルを詰めるスクリプトの作成方法

空白セルが1つであればカット&ペーストでも良いが、複数あったり、繰り返して行う必要があったりすると手動でやるのはかなり面倒だし間違える可能性も高くなる。

そのため、このような作業はGoogle Apps Script (以下GAS) で処理したほうが良い。

GASで選択範囲の空白セルを詰める

GASで選択範囲の空白セルを詰めるスクリプトを作成する前に以下のスクリプトでメニューに「拡張機能」 => 「選択範囲の空白セルを詰める」が表示されるようにする。
メニューに「拡張機能」 => 「選択範囲の空白セルを詰める」を表示

function onOpen() {
  const ui = SpreadsheetApp.getUi()
  const menu = ui.createMenu('拡張機能')
  menu.addItem('選択範囲の空白セルを詰める', 'fillEmptyCells')
  menu.addToUi()
}

次に選択範囲の空白セルを詰めるスクリプトを以下のように追記する。

function fillEmptyCells() {
  const ss = SpreadsheetApp.getActiveSheet()
  const range = ss.getActiveRange()
  if (range.getValues().length == 1) {
    const values = range.getValues()[0].sort((a, b) => {
      if (a === '') return 1
      if (b === '') return -1
      if (a === b) return 0
    })
    range.setValues([values])
  } else {
    const values = range.getValues().sort((a, b) => {
      if (a[0] === '') return 1
      if (b[0] === '') return -1
      if (a[0] === b[0]) return 0
    });
    range.setValues(values)
  }
}

getActiveRange()で選択範囲を取得して、さらにgetValues()ですべての値を取得。

取得した配列は空がうしろに並び替えられるようにsort()をしてsetValues()で値を戻せば空白セルを詰めるスクリプトの出来上がりだ。
Google Apps Scriptで選択範囲の空白セルを詰めるスクリプトの作成方法