Quantcast
Channel: いつも隣にITのお仕事
Viewing all articles
Browse latest Browse all 2094

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

$
0
0

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

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

前回の記事はこちら。

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

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

今回は、GASでスプレッドシートのセル範囲を行数・列数を使って取得する方法をお伝えしていきます。

では、行ってみましょう!

前回までのおさらい

題材としてスプレッドシートは以下のようなものです。

名言botのスプレッドシート

このシートに一覧されている名言を一つずつ通知をしていくBotを作成しております。

それで、前回までに作成したスクリプトがこちらです。

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet(); 
  var lastRow = sheet.getLastRow();
  
  for(var i = 2; i <= lastRow; i++) {
    if(!sheet.getRange(i, 4).getValue()){ 
      Logger.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() {
  var sheet = SpreadsheetApp.getActiveSheet(); 
  var lastRow = sheet.getLastRow();
   
  for(var i = 2; i <= lastRow; i++) {
    if(!sheet.getRange(i, 4).getValue()){ 
      Logger.log(sheet.getRange(i, 1).getValue());
      sheet.getRange(i, 4).setValue(true);
      break;
    }
  }
  
  if(i >= lastRow) {
    Logger.log(sheet.getRange(2, 4, lastRow - 1).getA1Notation());
  }
}

getA1Notationメソッドでセル範囲のアドレスを取得する

ちなみに、getA1NotationメソッドはRangeオブジェクトのアドレスを取得するメソッドです。

書式はこちら。

Rangeオブジェクト.getA1Notation()

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

スクリプトの実行結果

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

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

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

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

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

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

まとめ

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

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

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

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

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

どうぞお楽しみに!

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

Google Apps Script(GAS)をはじめるためのメリットは山程ありますが、何を作ったらいいの?と悩んでしまうこともありますよね。そんな時に、おすすめしたいのが「Bot」の作成です。このシリーズでは、超初心者向けにGASでBotを作る方法を題材としながら、GASプログラミングの一通りの流れと書き方について学んでいきます。
  1. 【初心者向けGAS】本当の最初の一歩!スクリプトエディタでプロジェクトを開く
  2. 【初心者向けGAS】はじめてのスクリプトを作成し、保存し、実行する
  3. 【初心者向けGAS】プログラミングに必須の変数の使い方とデータ型について
  4. 【初心者向けGAS】ログを表示するLogger.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】 スプレッドシートのセル範囲を行数・列数を使って取得する

Viewing all articles
Browse latest Browse all 2094

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>