[GAS]Rangeクラスのget/set Value()メソッドについて【中編】

GAS

どうも。つじけ(tsujikenzo)です。このシリーズではVBAの「RangeオブジェクトのRangeプロパティ」がGoogle Apps Scriptの「Rangeオブジェクト」とどう違うのかについて【前編・中編・後編】で書き留めていきたいと思います。今日は【中編】です。VBA猛者の方々にガブガブ食べられるのを恐れています💦

前回のおさらい

前回はVBAのRangeクラスについて、Rangeオブジェクトをオブジェクト変数として代入したり、Valuesプロパティ値の取得と設定を学びました。

[VBA]RangeオブジェクトのRangeプロパティについて【前編】
どうも。つじけ(tsujikenzo)です。このシリーズではVBAの「RangeオブジェクトのRangeプロパティ」がGoogle Apps Scriptの「Rangeオブジェクト」とどう違うのかについて【前編・中編・後編】で書き留めていき...

今日はGASで同じことをやりたいと思います。

GASのRangeクラスとは

ノンプロ研GAS初級講座7期のDay5でお伝えした通り、RangeクラスはGoogle Workspace Serviciesの[SpreadSheetサービス]に所属しており、使う時は[SpreadSheetApp]クラスから順番に[SpreadSheet]→[Sheet]→[Range]のように、マトリョーシカのように親から子へ続く階層構造で取り扱います。

[ノンプロ研]GAS初級講座7期DAY5補講
どうも。つじけ(tsujikenzo)です。2020年11月から始まりましたノンプロ研GAS初級講座7期ですが、このシリーズでは講座中では時間の都合でお伝えできなかったことなどを、全6回+おまけという感じでお届けしております。本日は5回目...

公式リファレンス

公式リファレンスも確認しておきましょう。

スプレッドシートの範囲にアクセスして変更します。範囲は、シート内の単一のセルまたはシート内の隣接するセルのグループです。

となっております。Rangesというクラスは無く、複数のセル範囲もRangeクラスで操作ができるようです。

Class Range  |  Apps Script  |  Google for Developers

また、Rangeクラスのメンバーはメソッドのみで、状態を表すプロパティ定数などは用意されていないようです。

代表的なメソッド

clearContent()

getA1Notation()

getValue(), getValues()

setValue(), setValues()

setBorder()

セルの値を取得、設定する

実際にセルに書かれている値を取得して確認したり、好きな値をセルに設定したりしてみましょう。コンテナバインドのSheet1にこのような値を用意しました。

値の取得や設定は問題ないと思います。

console.log(SpreadsheetApp.getActiveSheet().getRange('A1').getValue()); //A1です
SpreadsheetApp.getActiveSheet().getRange('A1').setValue('A1たい');
console.log(SpreadsheetApp.getActiveSheet().getRange('A1').getValue()); //A1たい

変数に代入

何度も繰り返し記述しているコード変数に代入してスッキリしましょう。GAS(JavaScript)は型の宣言をしなくても何でも変数に代入できるのが特徴的です。繰り返し登場するこの一文SpreadsheetApp.getActiveSheet().getRange(‘A1’)は中身はRangeオブジェクトです。分かりやすい変数を付けるのも上達のポイントです。

const rangeA1 = SpreadsheetApp.getActiveSheet().getRange('A1');
console.log(rangeA1.getValue()); //A1たい
rangeA1.setValue('A1です');
console.log(SpreadsheetApp.getActiveSheet().getRange('A1').getValue()); //A1です
console.log(rangeA1.getValue()); //A1です

最後の2行は同じことをしていますが、あえて並べて記述してみました。いかがでしょうか。rangeA1というRangeオブジェクトに対して、値の取得ならgetValue()、値の設定ならsetValue()という2つのメソッドで操作しました。

SpreadsheetApp API

GASでSpreadsheetAppなどのトップレベルオブジェクトを叩いた時に、下記のような承認を求められることがありますよね?

ドメインユーザー

gmail.comユーザー

自分で作成したスプレッドシートとスクリプトなのに、なぜ本人確認のようなものを求められるかと言うと、Google Workspace Servicesのトップレベルオブジェクト(SpreadsheetApp)を叩くということは、Google Workspace ServicesのAPIを叩くという作業そのものだからです。

APIとは

APIはインターネット上のアプリケーションにある問い合わせ窓口のようなもので、アプリケーションに命令を出す人とやり取りをする為に用意されている「アプリケーションプログラミングインタフェース」の略です。

スプレッドシートが発表された際、我々は「MicrosoftのExcelをネット上で使えるんだね」とばかり思って感動していました。しかし本質は「スプレッドシート(インターネット上のアプリケーション)にAPIを装備したからプログラミングで動かせるよ」というのがGoogle Apps Scriptの衝撃でございました(2015年8月のリリースです)。

Spreadsheet APIを叩く

少し脱線してしまいましたが、コンテナバインドスクリプトを作成して下記を実行すると、

console.log(SpreadsheetApp.getActiveSheet().getRange('A1').getValue());

SpreadsheetApp APIをコンコン(ノックするイメージ)と叩いて、SpreadSheetさんからは「お宅、どちら様?」と身分証明を求められ、「つじけです。てへ。」という作業が初回のみ必要なのです。一度認証を通してしまえば常連さんとして覚えてもらえますので、都度認証はありませんが、SpreadsheetAppにぶら下がっているクラスのメンバーを実行すると言うのはSpreadsheetApp APIを叩くことですから、なるべくサーバーには負担を掛けないように、APIを叩く回数は減らした方がいい(配列で取得するなど)というお話です。

このようにGASがVBAとExcelのように処理が早くないのは、毎回サーバーと通信してSpreadSheetを操作している為です。

まとめ

以上で、「GASでスプレッドシートのセルの値を取得、設定するには?」をお届けしました。GASでスプレッドシートを操作すると言うのは、都度SpreadsheetApp APIを叩いているというお話にまで発展しました。

次回は最終回です。VBAとGASのRangeクラスについて比較をまとめたいと思います。

このシリーズの目次

  1. [VBA]RangeオブジェクトのRangeプロパティについて【前編】
  2. [GAS]Rangeクラスのget/set Value()メソッドについて【中編】
タイトルとURLをコピーしました