🌊

GASで複数のセルがすべて入力されているか判定する

2023/01/30に公開

はじめに

GAS(Google Apps Script)でタイトルの内容を実現したかったのですが、楽な書き方がパッと出てこなかったので記事にしました。

結論

範囲中の値を1つずつ検証します。JSのArray.every()[1]を使うと楽です。

function isFull() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const cells = sheet.getRange('A1:B2').getValues().flat();
  return cells.every(cell => cell != '')  // true or false
}

解説

GASにはRange.isBlank()[2]というメソッドがあり、複数のセルがすべて空か判定できます。一瞬、タイトルの要件は!cells.isBlank()で満たせるかー、と思いましたが上手くいきませんでした。

!cells.isBlank()とすると、any的な挙動になってしまいます。すべてのセルが埋まっているとtrueを返すのではなく、1つでもセルが埋まっているとtrueが返ってくるということです。

ド・モルガンの法則とかいうやつですかね。

A B
1 hoge
2 fuga
const row = sheet.getRange('A1:B1');
Logger.log(row.isBlank());  // false

const column = sheet.getRange('B1:B2');
Logger.log(column.isBlank());  // true

これはisBlank()が all的な挙動になっているために起こります。なのでそれぞれのセルが入力されているかを地道に検証することで、タイトルの要件を満たしました。

工夫した点として、検索して出てくる記事だとfor文を使ったりしていて面倒臭かったのでArray.every()を使いました。

おわりに

Array.every()は初めて知りました。簡単にまとめられるので便利ですね〜

脚注
  1. https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/every ↩︎

  2. https://developers.google.com/apps-script/reference/spreadsheet/range?hl=ja#isblank ↩︎

GitHubで編集を提案
株式会社アクティブコア

Discussion