みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
初心者向けにGoogle Apps ScriptでBotを作成する方法についてシリーズでお伝えしています。
前回の記事はこちら。
条件に応じてループを制御する方法をお伝えしました。
今回は、GASでスプレッドシートのセル範囲を行数・列数を使って取得する方法をお伝えしていきます。
では、行ってみましょう!
前回までのおさらい
題材としてスプレッドシートは以下のようなものです。
このシートに一覧されている名言を一つずつ通知をしていくBotを作成しております。
それで、前回までに作成したスクリプトがこちらです。
function myFunction() { const sheet = SpreadsheetApp.getActiveSheet(); const lastRow = sheet.getLastRow(); for(let i = 2; i <= lastRow; i++) { if(!sheet.getRange(i, 4).getValue()){ console.log(sheet.getRange(i, 1).getValue()); sheet.getRange(i, 4).setValue(true); break; } } }
2行目から順番になめていってD列に「TRUE」ではない行を探して、その名言をBot(現在はログ出力ですが)しつつ、D列に「TRUE」と入力するものです。
それで、このスクリプトですが、全ての名言に「TRUE」が入力されるともう二度とBotを出力しなくなってしまいます。
今回はその点を解消していきたいと思います。
行数・列数を指定してセル範囲を取得する
さて、全ての名言を通知し終わると、スプレッドシートは以下のようになるわけです。
つまり、D列について2行目からデータのある最終行まで「TRUE」が入力されている状態です。
この状態になったときには、2行目から最終行までのD列のセル範囲の「TRUE」をクリアしたいわけです。
行数・列数を指定したgetRangeメソッドの使い方
それで、まずは「2行目から最終行までのD列のセル範囲」を取得する必要があります。
この場合も、Sheetオブジェクトに対してのgetRangeメソッドが使えるのですが、以下のように4つの引数を与えることになります。
まず、最初の二つの引数は整数で指定して、「左上のセル位置」を表現します。
今回の場合は、2行目のD列ですから
- 行番号:2
- 列番号:4
となります。
ここまでは、getRangeオブジェクトで単体セルを指定するときと同じですね。
次に、行数、列数はその「左上のセル位置」を基点として、何行分、何列分をセル範囲として取得するかを指定する整数になります。
今回の場合は
- 行数:lastRow - 1
- 列数:1
となります。
行数は、最終行番号から見出し行を除いた分になりますので、lastRowのマイナス1です。列数はD列のみなので1です。
全てのBotを通知したことを判定するスクリプト
では、試しに以下のようなスクリプトを実行してみましょう。
つまり、カウント用変数がlastRow以上になったら、D2セルからD列の最終行までのセル範囲のアドレスを出力するというものです。
function myFunction() { const sheet = SpreadsheetApp.getActiveSheet(); const lastRow = sheet.getLastRow(); for(let i = 2; i <= lastRow; i++) { if(!sheet.getRange(i, 4).getValue()){ console.log(sheet.getRange(i, 1).getValue()); sheet.getRange(i, 4).setValue(true); if(i >= lastRow) { console.log(sheet.getRange(2, 4, lastRow - 1, 1).getA1Notation()); } break; } } }
getA1Notationメソッドでセル範囲のアドレスを取得する
ちなみに、getA1NotationメソッドはRangeオブジェクトのアドレスを取得するメソッドです。
書式はこちら。
これで、取得したセル範囲がどこなのかということがわかりますよね。
スクリプトの実行結果
上記のスクリプトを以下の条件で実行したいと思います。
つまり、これから最終行の名言をBotするところですね。
実行してログを確認すると、最終行の名言がログ出力され、その後「D2:D239」と出力されました。
このセル範囲をクリアすれば、目指すことは達成できますよね。
まとめ
以上、GASでスプレッドシートのセル範囲を行数、列数を指定して取得する方法についてお伝えしました。
getRangeメソッドに行数、列数を含めて4つの引数を指定する方法は、それはもうよく使います。
最初はちょっとわかりづらいかも知れませんね。
バッチリマスターしちゃいましょう!
さて、次回はその取得したセル範囲をクリアする方法をお伝えします。
どうぞお楽しみに!
連載目次:超初心者向けGASでBotを作りながら基礎を学ぶ
Google Apps Script(GAS)をはじめるためのメリットは山程ありますが、何を作ったらいいの?と悩んでしまうこともありますよね。そんな時に、おすすめしたいのが「Bot」の作成です。このシリーズでは、超初心者向けにGASでBotを作る方法を題材としながら、GASプログラミングの一通りの流れと書き方について学んでいきます。- 【初心者向けGAS】本当の最初の一歩!スクリプトエディタでプロジェクトを開く
- 【初心者向けGAS】はじめてのスクリプトを作成し、保存し、実行する
- 【初心者向けGAS】プログラミングに必須の変数&定数の使い方とデータ型について
- 【初心者向けGAS】ログを表示するconsole.logの使い方とテンプレート文字列
- 【初心者向けGAS】スクリプト実行時の「承認」でびっくりしないために
- 【初心者向けGAS】Spreadsheetサービスの「オブジェクト」の基礎の基礎を知ろう
- 【初心者向けGAS】スプレッドシートのシートを取得する2つの方法
- 【初心者向けGAS】スプレッドシートのセル・セル範囲とその値を取得する方法
- 【初心者向けGAS】for文を使ったスプレッドシートの繰り返しの超基本
- 【初心者向けGAS】条件分岐をするif文の使い方の超基本
- 【初心者向けGAS】スプレッドシートのセルに値を入力する基礎の基礎
- 【初心者向けGAS】条件に応じてループを制御する2つの方法~break文とwhile文~
- 【初心者向けGAS】スプレッドシートのセル範囲を行数・列数を使って取得する
- 【初心者向けGAS】スプレッドシートのセル範囲をクリアするいくつかの方法
- 【初心者向けGAS】Google Apps ScriptでWeb APIを活用するための基礎知識
- 【初心者向けGAS】面倒なことはライブラリに任せよう!その概要と追加の方法
- 【初心者向けGAS】Chatworkのマイチャットにメッセージを送る最も簡単な例
- 【初心者向けGAS】Google Apps Scriptで別の関数を呼び出すfunctionの書き方
- 【初心者向けGAS】時限式のイベントトリガーを設置して決まった時刻にBotを送信する方法
- 【初心者向けGAS】プロパティストアの概要とスクリプトプロパティの編集方法
- 【初心者向けGAS】スクリプトプロパティを操作してそのデータを取り出す方法
- 【初心者向けGAS】スプレッドシートのセル範囲の値を二次元配列として取得して取り扱う方法
- 【初心者向けGAS】Chatworkのメッセージ記法でBot送信するメッセージを装飾する方法
- 【初心者向けGAS】Google Apps Scriptのドキュメンテーションコメントの書き方