【GAS入門】スプレッドシート自動化で重要な4つのクラスを理解しよう!

Home > TECH BLOG >【GAS入門】スプレッドシート自動化で重要な4つのクラスを理解しよう!
公開日:2022年10月6日 更新日:2022年10月11日

記事概要

これからGAS(Google Apps Script)で、Googleスプレッドシート自動化に挑戦したい入門者向けの記事です。
スプレッドシート自動化で重要な4つのクラスについて紹介します。

前提条件

GAS(Google Apps Script)の基礎を身につけていること
もし、基礎に不安がある方は、以下Udemy教材を使うと基礎から学ぶことができるので、そちらの受講をオススメします!

そもそもクラスとは

※ クラスについて理解している人は読み飛ばしてください
GASを学ぶ上においては、クラスを「便利な関数(function)をグループ分けする箱」と理解すると良いかと思います。
クラスとは便利な関数(function)をグループ分けする箱
クラスとは便利な関数(function)をグループ分けする箱
もし、詳しく学びたい場合は、以下記事がわかりやすかったので参考にしてみてください。
【GAS】クラスとインスタンス化
Google Apps Script(GAS)ではクラス・インスタンスという概念があります。 ベーシックな処理で使うシーンは多くないですが、知っていると記述の幅が広がるのでぜひ覚えていってください。 まずは下記のサンプルコードをご覧ください。 このオブジェクトpetには、animal、name、ageというプロパティとgreetというメソッドが用意されています。 function myFunction() { const pet = { animal: 'dog', name: 'Ted', age: 4, born: 1996, greet(){ console.log("Hi, I'm Ted."); } } animal.greet(); } このオブジェクトと同じ構造で、あと5匹分の動物のオブジェクトを用意する必要が出てきた場合どうすればよいでしょうか? すべてのオブジェクトのプロパティとメソッドをもれなく記述しようとすると、サンプルコードの5倍のスクリプト量になってしまいますよね。冗長化しておりメンテナンスも難しそうなのが直感的にわかります。 この問題を解決するために、javascriptには オブジェクトのひな形をベースとして同じメソッドやプロパティを持つ別のオブジェクトを生成する仕組み があります。 用語の定義としては下記です。 各オブジェクトをクラスから都度生成することにより、オブジェクトを毎回一から定義する必要がなくなり、簡潔なスクリプトにまとめることができます。 また、オブジェクトの構造を変えたいときも元のクラスの形式を変更してしまえば、連なるインスタンス構造も一括で変わるので修正やメンテナンスも簡単になります。 このようにしてクラスとインスタンスは、スクリプトの可読性、メンテナンス性、安全性等のさまざまな面でメリットがあります。 class文を使ってクラスを定義します。クラス名はの最初の文字は大文字で記述してください。 定義したクラスをインスタンス化するにはnew演算子を使います。指定してクラス定義に基づいて生成されたインスタンスが戻り値として変えることになります。 もちろん、new演算子より前にclass文が処理される必要があるので記述には注意しましょう。 通常では、オブジェクトにプロパティを定義するには、ドット表記等でプロパティに代入を行います。例えば、「pet」というオブジェクトの「age」というプロパティに「6」という値を代入するには〈pet.age=6〉と記述ができます。 今回のように、petというオブジェクトひな形になるclassに対して、インスタンス化を実行するに際には、コンストラクタという特別な関数とthisキーワードを使います。 constructor(引数1, 引数2,...){  this.プロパティ1 = 引数1  this.プロパティ2 = 引数2} function

スプレッドシート自動化で重要な4つのクラス

以下、4つが重要なクラスとそれぞれの概要です。
  1. SpreadsheetAppクラス
    1. スプレッドシートファイルのデータを管理するクラスです。例えば、スプレッドシートファイルの作成・取得・削除などができます。
  1. Spreadsheetクラス
    1. スプレッドシートのデータ(シート、スプレッドシートの名前、アクセス権限など)を管理するクラスです。例えば、スプレットシートのファイル名の変更、シートの作成・取得・削除などができます。
  1. Sheetクラス
    1. シートのデータ(シート名、セルなど)を管理するクラスです。例えば、シート名の変更、行の追加・削除、選択した範囲のセルの取得などができます。
  1. Rangeクラス
    1. 選択した範囲のセルのデータを管理するクラスです。例えば、セルの値を取得・変更することができます。

自動化例 - 株価時系列スプレッドシートの検索

概要

  1. 開始日と終了日を入力して「表示する」を実行します。
  1. 「開始月-開始日_終了月-終了日」の形式で指定した日付の時系列株価シートが自動生成されます。

デモ

スプレッドシート自動化例 - 株価時系列スプレッドシートの検索のデモ動画

動作確認の方法

  1. 「株価時系列データ検索」のスプレッドシートを開きます↓
  1. 自分のGoogleドライブにコピーする
    1. メニュー > ファイル > コピーを作成
  1. 「表示する」をクリックすると株価検索ができます。

GASスクリプトの確認方法

  1. Google Apps Scriptのコードを確認する
    1. メニュー > 拡張機能 > Apps Script
    2. AppScriptメニュー
      AppScriptメニュー
AppScriptのコード作成画面
AppScriptのコード作成画面

GASスクリプト

GASスクリプト解説

現在開いているSpreadsheetクラスのオブジェクを取得して、変数spreadsheetに格納しています。

dataシートを取得して、変数sheetに格納しています。

検索条件の開始日、終了日と株価時系列データを取得します。
  • 検索条件
  • 株価時系列

検索条件(開始日、終了日)に合致する株価時系列の配列を生成して、変数stockValuesに格納します。

検索条件の開始日、終了日を使って、「開始月-開始日_終了月-終了日」というシート名の文字列を生成して、変数sheetNameに格納します。
  • 例えば、検索条件で、開始日:9月6日、終了日:9月30日の場合は「9-6_9-30」というシート名が生成されます。

検索結果シートが既にあったら削除します。シート名が重複するとエラーが発生するため。

ヘッダー行「日付, 始値, 高値, 安値, 終値, 出来高, 調整後終値*」の配列を取得して、変数headersに格納します。

ヘッダー行headersを株価時系列配列の先頭に追加します。

検索結果を格納するシートをsheetNameで作成します。

検索結果の貼り付け範囲を何行目から何行目からになるのか計算してます
  • 「startIndex + stockValues.length - 1」で最終行を計算してます。
    • 「-1」はヘッダー行の分を減らしています。

R1C1表記の文字列(rangeStr)で、検索結果データを格納する範囲を取得し、変数resultDataRangeに格納します。

検索結果を格納する範囲(resultDataRange)に検索結果(stockValues)を設定します。

format関数を使って、検索結果を格納するシートに色をつけて見やすくします。
resultSheetのシートをアクティブ(選択状態)にします。

まとめ

  • スプレッドシート自動化で重要な4つのクラス
  • その4つのクラスを使ったプログラム例として「株価時系列スプレッドシートの検索」
を扱いました。
工夫次第で他にも色々とスプレッドシートの自動化ができますので、ぜひ、色々と挑戦して見てください。

[宣伝] GASプログラミング入門の教材 - Udemy

  • 2023年11月時点で、約3,000人の受講生を獲得し、「Udemy Business」に選定されてます。
    • 「Udemy Business」とは、Udemyが「企業研修」向けに提供しているサービスのことです。
    • Udemyで販売している全ての講座の中から、「企業研修」に提供できる高品質な講座をレビューや内容を加味して厳選していることが特徴のサービスです。
    • その「Udemy Business」で、このGAS講座は採用されております。
  • 教材の詳細は、以下のUdemyに記載しておりますので内容ご確認ください
    • 以下のバナーから購入すると、通常、定価27,800円が1,600円に割引される特別クーポンが適用されます!

関連ブログ