【GAS超入門】GASでスプレッドシートにアクセスする

普段、Googleスプレッドシートを使って、データの管理や集計作業を行っている方は多いと思います。毎日のように行うコピー&ペースト、複数のシートからのデータ転記、決まった場所へのデータ入力。「この定型作業、もっと楽にならないかな?」と感じたことはありませんか?

そのお悩み、Google Apps Script(GAS)を使えば解決できるかもしれません。GASは、Googleの各種サービスをプログラムで操作するための仕組みです。これを使うと、スプレッドシートの面倒な手作業を自動化し、作業時間を大幅に短縮することが可能になります。

とはいえ、プログラミングと聞くと「難しそう…」とためらってしまうかもしれません。でも、ご安心ください。GASは初心者にも比較的学びやすく、特にスプレッドシートの操作は基本的なルールさえ覚えれば、すぐに効果を実感できます。

この記事では、GASを使ってスプレッドシートを操作するための最も重要な「最初の一歩」として、特定のスプレッドシートファイルに「アクセス」する方法を分かりやすく解説します。

自動化の第一歩は、まず「どのファイル」の「どのシート」の「どのセル」を操作したいのかを、GASに正確に伝えることから始まります。この記事では、そのための基本的な仕組みと考え方、そして具体的なコードの書き方を紹介します。

この記事を読み終える頃には、スプレッドシート自動化の基本が理解でき、ご自身の業務改善への第一歩を踏み出せているはずです。一緒に学んでいきましょう。

スプレッドシートのデータを取得する

スプレッドシートにアクセスするための4つのクラス(オブジェクト)

スプレッドシートにアクセスするために毎回と言っていいほど利用するクラスがあります。

まずは、それを覚えましょう。

  • SpreadsheetApp
    • SpreadSheetサービスのトップレベルのオブジェクト
  • Spreadsheet
    • スプレッドシートを操作する機能のるクラス
  • Sheet
    • シートを操作する機能のクラス
  • Range
    • セルの範囲を操作する機能のクラス

では、これらのデータをGASからどのように操作するか見ていきましょう。

試しに、以下のようにGASに記述してみてください。

これはどういう意味かというと、「SpreadsheetApp」というオブジェクトを「ドット」で繋いで「getActiveSpreadsheet()」で「今開いている(アクティブな)スプレッドシートを取得してください」という命令を出しています。

それを、「const」で「ss」という定数に代入しています。

その後に、「console.log()」でコンソールに表示してね、という命令を出し「()」の引数に「ss.getName()」という命令を出して、「ss」定数を「getName():名前をゲットして」と命令してるわけですね。

すると、「実行ログ」の実行開始の下に「GASでスプレッドシートにアクセスする」というシートの名前を表示させることができてるというわけです。

注意:ただし、このアクセス方法は「コンテナバインドスクリプト」でのみ利用できるメソッドです。スプレッドシートの「拡張機能」→「Apps Script」から作成するものがこれにあたります。

ID・URLでスプレッドシートを取得する方法

上記の方法は、コンテナバインドスクリプトでのみ取得できる命令方法でした。

もし、スタンドアロンスクリプトでアクセスしたい場合は、次の方法でデータにアクセスする必要があります。

SpreadsheetAppのメソッドにopenById()として、引数にスプレッドシートのIDを入力します。

スプレッドシートのIDは、d/と/editの間のURLの一部です。

これをコピーして、「openById(‘ここに貼り付ける’);」貼り付けてください。

そうすることで、スプレッドシートにアクセスできます。

そして、もう一つのやり方がURLを直接記入してアクセスする方法です。

「opneByUrl(‘ここにURLを貼り付ける’);」の引数の中に、スプレッドシートのURLをそのまま丸ごと入力します。

そうすることで、スプレッドシートに直接アクセスできます。

注意:スタンドアロンスクリプトの場合は、IDかURLのどちらかでアクセスする必要があります。

アクティブなスプレッドシートを取得して操作する

次は、スプレッドシート内のシートにアクセスします。

スプレッドシートは、複数のシートを作成することができますが、その中の開いてるシートをアクティブなシートと言います。

現在開いているシートは「シート1」です。

「ss.getActiveSheet()」とすることで、今開いているシートを取得することができます。

それを「console.log(ssheet.getName());」でコンソールに表示しています。

実行ログの実行開始のところに「シート1」としてシートの名前を表示できています。

では、今度は、シート名を直接指定して指示を出す方法です。

「シート2 」をスプレッドシートに追加します。

以下の方法で、任意のシートにアクセスすることができます。

「getSheetByName(‘シート名’);」でアクティブではなくてもシート名で任意のシートにアクセスして操作することができるようになります。

汎用性が高いのはこちらなので、基本的にシート名でシートを指定するといいと思います。

セルの値の取得と設定について

続いては、セルの値を取得する方法について解説します。

「getRange()」メソッドで、引数に(‘B3’)としてスプレッドシートから取得したいデータのセルを指定します。

その後に、「.getValue()」メソッドを続けて書きます。

今回は、B3セルに入っている「12345」という数字を取得するので、引数に(‘B3’)と入力します。

そして、console.logで定数「value」を表示すると、実行ログに「12345」が表示されてるのがわかると思います。

次は、別のB6セルにB3セルで取得した「12345」という数字をセットしたいと思います。

sheet.getRangeで、B6セルの範囲を指定します。

その後に、「.setValue(value);」のメソッドを指定し引数に(value)をセットすることで、value定数で取得した「12345」の数字をB6セルにコピーペーストすることができます。

このように、任意のデータ情報を取得して、任意の範囲にコピーペーストすることができました。

メソッドチェーンとは?(鎖のようにつなげる書き方)

メソッドチェーンは、GASだけでなく多くのプログラミング言語で使われる記述テクニックの一つです。

一言でいうと、「メソッド(命令)を数珠つなぎにして、1行のコードで連続処理させる書き方」のことです。

A.B().C().D() のように、B() の処理結果(戻り値)に対して、すぐに .C() を実行し、その結果に対して .D() を実行する…。このように、処理を「.(ドット)」でつないでいく様子が、まるで鎖(チェーン)のようであることから、メソッドチェーンと呼ばれます。

なぜメソッドチェーンを使うのか?

メソッドチェーンを使う最大のメリットは、「コードが短く、読みやすくなること」です。

処理のたびに結果を一時的な変数(入れ物)に入れる必要がなくなり、何をしているのかが一連の流れとして直感的に理解しやすくなります。

スクリプトの比較(チェーンなし vs チェーンあり)

メソッドチェーンの便利さを理解するために、まずはあえてチェーンを使わずに、すべての処理を1行ずつ書いた場合を見てみましょう。

比較1:メソッドチェーンを使わない書き方

もし、ご提示いただいたスクリプトの処理を、メソッドチェーンを一切使わずに書くと、このようになります。

// メソッドチェーンを使わずに1行ずつ書いた場合
function notChained() {
  // 1. スプレッドシート全体を取得
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  
  // 2. 'シート1' という名前のシートを取得
  const sheet = ss.getSheetByName('シート1');
  
  // 3. 'B3' のセル(Rangeオブジェクト)を取得
  const rangeB3 = sheet.getRange('B3');
  
  // 4. B3のセルの「値」を取得
  const value = rangeB3.getValue();
  
  // 5. 'B6' のセル(Rangeオブジェクト)を取得
  const rangeB6 = sheet.getRange('B6');
  
  // 6. B6のセルに 4 で取得した値を設定
  rangeB6.setValue(value);
  
  console.log(value);
}

このように、rangeB3rangeB6 といった、その場限りの「一時的な変数」がたくさん必要になり、コードが長くなってしまいます。

比較2:適度にチェーンを使った書き方

これは、メソッドチェーンを効果的に使った、とても良いお手本です。

function myFunction() {
  // スプレッドシートとシートは、後で何度も使う可能性があるため、
  // 変数 ss と sheet に入れておきます。
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = ss.getSheetByName('シート1');
  
  // ★ここがメソッドチェーンです
  // 1. sheet.getRange('B3') でセルを取得
  // 2. 続けて .getValue() でそのセルの値を取得
  const value = sheet.getRange('B3').getValue();
  
  // ★ここもメソッドチェーンです
  // 1. sheet.getRange('B6') でセルを取得
  // 2. 続けて .setValue(value) でそのセルに値を設定
  const value2 = sheet.getRange('B6').setValue(value);
  
  console.log(value);
}

注目すべきは、const value = sheet.getRange('B3').getValue(); の部分です。

  1. sheet.getRange('B3') が実行されます。
  2. これにより、「B3セルの情報(Rangeオブジェクト)」が返されます。
  3. その返された Range オブジェクトに対して、続けて .getValue() が実行され、最終的にセルの値が value に代入されます。

notChained の例にあった rangeB3 という一時的な変数が不要になり、コードがスッキリしました。

「B3セルの値を取得する」という一連の操作が、1行で完結しています。

メソッドチェーンの仕組み

メソッドチェーンが成立する大前提は、「メソッド(例:getRange())の実行結果(戻り値)が、次のメソッド(例:getValue())を持っているオブジェクトであること」です。

GASのスプレッドシート操作は、この仕組みを前提に作られています。

  1. SpreadsheetApp.getActiveSpreadsheet()
    • Spreadsheet オブジェクト(スプレッドシートそのもの)が返る
  2. ss.getSheetByName('シート1')
    • Sheet オブジェクト(シートそのもの)が返る
  3. sheet.getRange('B3')
    • Range オブジェクト(セルそのもの)が返る
  4. range.getValue()
    • → セルの「値」(文字列や数値)が返る

getValue() の結果は、ただの文字列や数値です。それらには .getRange().getSheetByName() といったメソッドは無いため、getValue() の後にはチェーンをつなげることができません。

さらにチェーンをつなげることも可能

やろうと思えば、以下のようにすべてを1行につなげることもできます。

function fullyChained() {
  // 1行でB3の値を取得
  const value = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1').getRange('B3').getValue();
  
  // 1行でB6に値を設定
  SpreadsheetApp.getActiveSpreadsheet().getSheetByName('シート1').getRange('B6').setValue(value);
  
  console.log(value);
}

このコードは「アクティブなスプレッドシートの、シート1の、B3セルの、値を取得する」という流れが1行で書かれています。

まとめ:スプレッドシート操作の第一歩は「アクセス」の理解から

この記事では、GAS(Google Apps Script)を使ってスプレッドシートを操作するための、最も基本的かつ重要な「アクセス方法」について解説しました。

GASでスプレッドシートを扱う際、まず理解すべきは「SpreadsheetApp(GASの窓口)」→「Spreadsheet(スプレッドシートファイル本体)」→「Sheet(個別のシート)」→「Range(セルやセルの範囲)」という階層構造です。この流れを意識することが自動化の第一歩となります。

スプレッドシートファイル(Spreadsheet)を取得するには、主に3つの方法があります。スクリプトが紐づいているファイルや現在開いているファイルを取得する getActiveSpreadsheet()、ファイルの固有IDを使って取得する openById()、そしてファイルのURLで取得する openByUrl() です。

ファイルを取得できたら、次に getSheetByName()getActiveSheet() を使って操作対象のシート(Sheet)を取得します。

最後に getRange() で目的のセル(Range)を掴み、getValue() で値を読み取ったり、setValue() で値を書き込んだりします。

これらの処理を .(ドット)でつなげて記述する「メソッドチェーン」を活用すると、コードをより短く、効率的に記述できます。まずはこの基本操作をマスターし、定型作業の自動化に挑戦してみましょう。

Dチームメルマガ登録|eBOOK「逆引きAIツールブック」プレゼント中


AIやマーケティングに関する情報を不定期配信中
eBOOK「逆引きAIツールブック」プレゼント中です
↓ ↓ ↓

Dチームメルマガはこちら>>>

 

ABOUT US
山田 どうそん
受講生3万人以上のオンラインビジネス構築のやり方を教える講師|6年以上サブスクメンバーシップのコミュニティを運営|オンラインビジネスで安定したコミュニティシステムの作り方を教えている|1人でも多くの人にオンラインビジネスで物心両面の豊かさを手に入れられるようにディレクションできたらと思っている