Google Spreadsheetでループを回す時、取得するセルが空でエラーが出る時の原因と解決策を紹介。

Tomamu ski resort

こんにちは、書川(カキカワ)です。

googleのスプレッドシートで自動化を実装する際に、躓いてしまい解決する事に時間が掛かったことを紹介する。

プログラミングを書く時は、繰り返しの処理を行うfor文と条件分岐を行うif文を理解することでアイデアさえあれば大抵の簡単な処理は可能になる。他にも理解しなければらない事は多いけど、ひとまずここが一つの壁だと思う。

この記事と一緒に、条件分岐で必要になる演算子が分かる記事を読むことをお勧めする。

ループを回す時に、セルが空の場合はエラーになる。

未経験から大手IT企業に転職した僕は、プログラミングを学び始めてGoogleSpreadSheetのスクリプトであるGASを使って処理の自動化をすることにした。

特定のセルの値を取得する繰り返し処理をしている時に、セルの値が空だとエラーが返ってきて繰り返し処理が止まってしまった。

実際にスプシは以下のような状態で、途中で空のセルがある事が分かった。

GASに書かれているコードは以下。このままでデバッグを行うとエラーで先に進めなくなる。

Error in debugging of GAS

コードがハイライトになっている部分に原因が有ると考え、試しに空になっているセルに適当な数字を打ち込んでデバッグした。

すると、繰り返し処理は途中で止まることなく正常に欲しい情報が得られから、僕が書いたコードに問題はない。ここで繰り返し処理の中で空のセルをスキップする処理を追加する方法が有るかどうかを調べてみた。

特定の条件のみループをスキップする「continue」

特定の条件の時だけ、処理をスキップするように指示するには、「continue」を条件分の中に追加する。

繰り返し文の中で、設定した条件文の中に「continue」を書くと、その条件に該当するときだけ次の処理に移り処理を続けていく。

先ほどのシートでは、セルが空の時に取得する値が「Null:何も返す値がない状態」だから、エラーになってループが停止してしいた。

それでは、空のセルの場合に処理を飛ばすことを条件にすれば解決しそうだ。

はじめにエラーが出るコードの条件文の中に、以下の条件文を追加する。

if(sheet.getRange(i, 1).getValue() == “”){
continue;
}

セルを取得する関数「sheet.getRange(i, 1).getValue()」と「””」を比較演算子で真偽の評価している。値や文字列が空の場合は「””」を使う。

このように書く事で、「該当のセルが空の時はスキップする」という処理がされる。

はじめの条件式に当てはまらない場合は、その後に書かれている「else文」に書かれている条件式を評価し、記載した処理を行う。

デバッグのログを確認した時にちゃんと豚が鳴いていますか?

特定の条件のみループを停止する「break」

次は、該当する条件の時に繰り返し文を停止する方法を紹介する。

スキップではなく、停止なので特定の条件に該当した場合にはそれ以降の要素を取得する事なく、繰り返しの処理は終了する。

先ほど「continue」を追加したところに、「break」を置き換えて処理の確認をする。

if(sheet.getRange(i, 1).getValue() == “”){
break;
}

シートでは、3列目の値が空だから、そこまでしか繰り返しの処理は行っていない事が分かる。

まとめ

今回は、セルが空の時にエラーで処理が止まってしまう時を例にそれを回避するため、「continue」「break」を紹介した。

使い方は、条件式に設定次第で何にでも活用できるので開発の時にコードが複雑になっていたらこの方法をぜひ思い出して欲しい。