【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)をグループ分けする箱」と理解すると良いでしょう

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

以下、4つが重要なクラスとそれぞれの概要です。これらのクラスは階層構造になっており、上位のクラスから下位のクラスにアクセスする流れになります。

クラスの階層関係

各クラスの詳細説明

  1. SpreadsheetAppクラス
    1. スプレッドシートファイルへのアクセスを提供する最上位クラスです。スプレッドシートファイルの作成・取得・削除などができます。
      主なメソッド
      メソッド説明
      getActiveSpreadsheet()現在開いているスプレッドシートを取得
      create(name)新しいスプレッドシートを作成
      openById(id)IDを指定してスプレッドシートを開く
      openByUrl(url)URLを指定してスプレッドシートを開く
      インスタンス取得例
  1. Spreadsheetクラス
    1. 個々のスプレッドシートファイルを表現するクラスです。スプレッドシートのデータ(シート、スプレッドシートの名前、アクセス権限など)を管理します。
      メソッド説明
      getSheets()すべてのシートの配列を取得
      getSheetByName(name)名前でシートを取得
      insertSheet(sheetName)新しいシートを挿入
      deleteSheet(sheet)シートを削除
      getActiveSheet()現在アクティブなシートを取得
      インスタンス取得例
  1. Sheetクラス
    1. スプレッドシート内の個々のシートを表現するクラスです。シートのデータ(シート名、セルなど)を管理します。
      主なメソッド
      メソッド説明
      getRange(a1Notation)A1表記でセル範囲を取得
      getRange(row, column, numRows,numColumns)行と列の番号でセル範囲を取得
      getLastRow()データがある最終行を取得
      getLastColumn()データがある最終列を取得
      insertRowAfter(afterPosition)指定した行の後に新しい行を挿入
      clear()シートのすべての内容をクリア
      インスタンス取得例:
  1. Rangeクラス
    1. シート内の特定のセル範囲を表現するクラスです。選択した範囲のセルのデータを取得・更新することができます。
      主なメソッド
      メソッド説明
      getValue()範囲の左上のセルの値を取得
      getValues()範囲内の全セルの値を2次元配列で取得
      setValue(value)範囲の左上のセルに値を設定
      setValues(values)範囲内の全セルに値を設定
      setBackground(color)背景色を設定
      setFontColor(color)フォント色を設定
      merge()セルを結合
      インスタンス取得例

チェックポイント - ここまでの理解度確認

ここで簡単に理解度を確認しましょう
Q1. SpreadsheetAppクラスから具体的なセル範囲(Rangeクラス)にアクセスするには、どのような順序でメソッドを呼び出せばよいですか?
Q2. A1セルからC3セルまでの範囲を取得するコードを書いてみましょう。
Q3. スプレッドシート内の「データ」という名前のシートにアクセスするコードを書いてみましょう。

チェックポイント解答

  • A1. SpreadsheetAppクラスから具体的なセル範囲(Rangeクラス)にアクセスする順序:
    • A2. A1セルからC3セルまでの範囲を取得するコード:
      • A3. スプレッドシート内の「データ」という名前のシートにアクセスするコード:

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

        概要

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

        デモ

        動作確認の方法

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

        GASスクリプトの確認方法

        1. Google Apps Scriptのコードを確認する
          1. メニュー > 拡張機能 > Apps Script

        GASスクリプト

        GASスクリプト解説

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

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

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

        検索条件(開始日、終了日)に合致する株価時系列の配列を生成して、変数stockValuesに格納します。
        • Array.prototype.filter()
          • 配列の中から、提供された関数で実装されたテストに合格した要素のみを抽出したシャローコピーを作成します。
          • 戻り値:「startDate <= value[0] && value[0] <= endDate」がtrueになる配列の要素。
          • 補足:今回の場合だと、「開始日と終了日の範囲に入る株価時系列データ」の配列stockValuesができます。

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

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

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

        ヘッダー行headersを株価時系列配列の先頭に追加します。
        • Array.prototype.unshift() Array.prototype.unshift() - JavaScript | MDN
          • 配列の最初に 1 つ以上の要素を追加し、新しい配列の長さを返します。
          • 戻り値:メソッドを呼び出した後のオブジェクトの新しい length プロパティの値です

        検索結果を格納するシートをsheetNameで作成します。
        • Spreadsheet.insertSheet(sheetName) Class Spreadsheet | Apps Script | Google Developers
          • 新しいスプレッドシートを指定された名前で挿入します。新しいシートがアクティブなシートになります。
          • 戻り値:Sheet - 新しいシート

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

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

        検索結果を格納する範囲(resultDataRange)に検索結果(stockValues)を設定します。
        • Range.setValues(values) Class Range | Apps Script | Google Developers
          • 値の四角形のグリッドを設定します(この範囲の配列とvalues配列を一致させる必要があります)
          • 戻り値:Range - チェーン用の範囲。

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

        GASスクリプトのデバッグとエラー対処法

        コードを書いていく過程では、しばしばエラーが発生します。GASでのエラー対処法についていくつか紹介します:

        1. ログ出力

        を使って変数の値や処理の経過を確認できます。

        2. エディタの「デバッグ」機能を使用する

        Scripts エディタから実行する際、「実行」ボタンの横の「デバッグ」ボタンをクリックすると、ブレークポイントを設定して変数の値を確認しながら実行できます。

        3. try-catch文でエラーをキャッチする

        エラーが発生しそうな箇所は、try-catch文で囲んでエラー内容を確認できます。

        まとめ

        この記事では以下を説明いたしました。
        • スプレッドシート自動化で重要な4つのクラス(SpreadsheetApp、Spreadsheet、Sheet、Range)について
          • これらのクラスは階層構造になっており、上位のクラスから下位のクラスにアクセスする形になります
        • 実際の事例として「株価時系列スプレッドシートの検索」のGASコードの解説
        • GASスクリプトのデバッグ方法について
        工夫次第で他にも色々とスプレッドシートの自動化ができますので、ぜひ、色々と挑戦して見てください。

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

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

        関連ブログ