【GAS GoogleAppsScript | 初心者向け】ループを回す時、取得するスプレッドシートのセルが空でエラーが出た時

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

グーグルのスプレッドシートで自動化を実装する際に、僕が解決する事に時間が掛かった問題を紹介します。

プログラミングを書く時は、繰り返しの処理を行うfor文と条件分岐を行うif文を理解することでアイデアさえあれば大抵の簡単な処理は可能になります。

この記事と一緒に、条件分岐で必要になる演算子が分かる記事も書きました。

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

プログラミングを学び始めた当初、GoogleAppsScriptを使って処理の自動化をすることにしました。

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

実際にスプレッドシートでは以下のような状態で、途中で空のセルがある事が分かりました。

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

Error in debugging of GAS

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

すると、繰り返し処理は途中で止まることなく正常に欲しい情報が得られました。コード自体に致命的な問題はないが、もう少し工夫が必要です。

ここで繰り返し処理の中で空のセルをスキップする処理を追加する方法が必要です。

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

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

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

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

空のセルの場合に処理を飛ばすことを条件にすれば解決しそうです。
はじめにエラーが出るコードの条件文の中に、以下の条件文を追加します。

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

セルを取得する関数「sheet.getRange(i, 1).getValue()」と「 “” (ダブルクォーテーション2つ)」を比較演算子で真偽の評価しています。値や文字列が空の場合は「 “” (ダブルクォーテーション2つ)」を使います。

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

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

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

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

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

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

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

デバッグを実行すると、シートでは3列目の値が空なので、そこまでしか繰り返しの処理は行っていない事が分かります。

まとめ

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

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

そんな感じです。


Asset
20 Posts
Bygone
28 Posts
Coding
14 Posts