🌊
GASで複数のセルがすべて入力されているか判定する
はじめに
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()は初めて知りました。簡単にまとめられるので便利ですね〜
Discussion