【初心者向けGAS】スプレッドシートのセル範囲を行数・列数を使って取得する


みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

初心者向けにGoogle Apps ScriptでBotを作成する方法についてシリーズでお伝えしています。

前回の記事はこちら。

【初心者向けGAS】条件に応じてループを制御する2つの方法~break文とwhile文~
初心者向けGoogle Apps ScriptのシリーズとしてBotの作り方についてお伝えしています。今回は、GASで条件に応じてループを制御する2つの方法としてbreak文とwhile文についてです。

条件に応じてループを制御する方法をお伝えしました。

今回は、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を出力しなくなってしまいます。

今回はその点を解消していきたいと思います。

行数・列数を指定してセル範囲を取得する

さて、全ての名言を通知し終わると、スプレッドシートは以下のようになるわけです。

名言Botのスプレッドシートで全ての行がTRUE

つまり、D列について2行目からデータのある最終行まで「TRUE」が入力されている状態です。

この状態になったときには、2行目から最終行までのD列のセル範囲の「TRUE」をクリアしたいわけです。

行数・列数を指定したgetRangeメソッドの使い方

それで、まずは「2行目から最終行までのD列のセル範囲」を取得する必要があります。

この場合も、Sheetオブジェクトに対してのgetRangeメソッドが使えるのですが、以下のように4つの引数を与えることになります。

Sheetオブジェクト.getRange(行番号, 列番号, 行数, 列数)

まず、最初の二つの引数は整数で指定して、「左上のセル位置」を表現します。

今回の場合は、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オブジェクトのアドレスを取得するメソッドです。

書式はこちら。

Rangeオブジェクト.getA1Notation()

これで、取得したセル範囲がどこなのかということがわかりますよね。

スクリプトの実行結果

上記のスクリプトを以下の条件で実行したいと思います。

つまり、これから最終行の名言をBotするところですね。

名言Botシートの最終行を処理する

実行してログを確認すると、最終行の名言がログ出力され、その後「D2:D239」と出力されました。

名言Botの最終行をログ出力

このセル範囲をクリアすれば、目指すことは達成できますよね。

まとめ

以上、GASでスプレッドシートのセル範囲を行数、列数を指定して取得する方法についてお伝えしました。

getRangeメソッドに行数、列数を含めて4つの引数を指定する方法は、それはもうよく使います。

最初はちょっとわかりづらいかも知れませんね。

バッチリマスターしちゃいましょう!

さて、次回はその取得したセル範囲をクリアする方法をお伝えします。

【初心者向けGAS】スプレッドシートのセル範囲をクリアするいくつかの方法
Google Apps ScriptでBotを作りながらその基本を学んでいくシリーズです。今回はスプレッドシートのセル範囲をクリアする方法としてclearメソッド、clearContentメソッドを紹介します。

どうぞお楽しみに!

連載目次:超初心者向けGASでBotを作りながら基礎を学ぶ

Google Apps Script(GAS)をはじめるためのメリットは山程ありますが、何を作ったらいいの?と悩んでしまうこともありますよね。そんな時に、おすすめしたいのが「Bot」の作成です。このシリーズでは、超初心者向けにGASでBotを作る方法を題材としながら、GASプログラミングの一通りの流れと書き方について学んでいきます。
  1. 【初心者向けGAS】本当の最初の一歩!スクリプトエディタでプロジェクトを開く
  2. 【初心者向けGAS】はじめてのスクリプトを作成し、保存し、実行する
  3. 【初心者向けGAS】プログラミングに必須の変数&定数の使い方とデータ型について
  4. 【初心者向けGAS】ログを表示するconsole.logの使い方とテンプレート文字列
  5. 【初心者向けGAS】スクリプト実行時の「承認」でびっくりしないために
  6. 【初心者向けGAS】Spreadsheetサービスの「オブジェクト」の基礎の基礎を知ろう
  7. 【初心者向けGAS】スプレッドシートのシートを取得する2つの方法
  8. 【初心者向けGAS】スプレッドシートのセル・セル範囲とその値を取得する方法
  9. 【初心者向けGAS】for文を使ったスプレッドシートの繰り返しの超基本
  10. 【初心者向けGAS】条件分岐をするif文の使い方の超基本
  11. 【初心者向けGAS】スプレッドシートのセルに値を入力する基礎の基礎
  12. 【初心者向けGAS】条件に応じてループを制御する2つの方法~break文とwhile文~
  13. 【初心者向けGAS】スプレッドシートのセル範囲を行数・列数を使って取得する
  14. 【初心者向けGAS】スプレッドシートのセル範囲をクリアするいくつかの方法
  15. 【初心者向けGAS】Google Apps ScriptでWeb APIを活用するための基礎知識
  16. 【初心者向けGAS】面倒なことはライブラリに任せよう!その概要と追加の方法
  17. 【初心者向けGAS】Chatworkのマイチャットにメッセージを送る最も簡単な例
  18. 【初心者向けGAS】Google Apps Scriptで別の関数を呼び出すfunctionの書き方
  19. 【初心者向けGAS】時限式のイベントトリガーを設置して決まった時刻にBotを送信する方法
  20. 【初心者向けGAS】プロパティストアの概要とスクリプトプロパティの編集方法
  21. 【初心者向けGAS】スクリプトプロパティを操作してそのデータを取り出す方法
  22. 【初心者向けGAS】スプレッドシートのセル範囲の値を二次元配列として取得して取り扱う方法
  23. 【初心者向けGAS】Chatworkのメッセージ記法でBot送信するメッセージを装飾する方法
  24. 【初心者向けGAS】Google Apps Scriptのドキュメンテーションコメントの書き方

タイトルとURLをコピーしました