Google Apps Script学習録①~特定セルの値を取得して、別のセルに入力~

昨年末にこんな記事を書いたんですが、Google Apps Scriptについて1年勉強していたので、改めてイチから学習録を残していこうと思います。

僕のスペック:社会人3年目。大学は法学部卒で、仕事ではエンタメ企業の新規事業セクションで駆け出しプロダクトマネージャー&(一応)子会社役員。要するになんでもやるマン。ビジネスサイドの人間です。

まずGoogle Apps Script(GAS)とは、Googleが提供しているプログラミング言語で、JavaScriptを基に作られています。GoogleドキュメントやGoogleスプレッドシートなど、Googleの提供サービスと連携することができます。

例えば、「Gmailで受信したメールの本文を自動でスプレッドシートに追加する」といった処理をさせることが可能です。今回は、スプレッドシートからGoogle Apps Scriptを作成する手順を紹介します。

画像1

スプレッドシートを開くと、上部タブに「ツール」という項目があります。ここをクリックすると「スクリプトエディタ」という項目があるので、それもクリックしてください。そうすると、下記のようなエディタ画面に遷移します。

画像2

あとは、ここにひたすらコードを書いていくことになります。

今回は初回なので、「スプレッドシートの特定のセルの値を取得して、別のセルに記入する」という基本的な処理についてご紹介します。

まず、最終的なコードは下記のような感じです。

function myFunction() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheetByName("シート1");
 var val = sheet.getRange(1, 1).getValue();
 sheet.getRange(1, 2).setValue(val);
}

1行ずつ説明していきます。

function myFunction() {
}

まず、ここは「myFunctionという名前の関数(function)を作ります」という宣言をしています。そして、そのmyFunction関数で処理される内容を、{}の中に書き込んでいきます。

var ss = SpreadsheetApp.getActiveSpreadsheet();

2行目のここは、まず参照するスプレッドシートを指定しています。「var」は変数の定義です。ざっくり、数学とかで「鶴と亀の数をそれぞれX、Yとおく」みたいに変数を定義することがありますが、そんなイメージ。
「この関数で"ss"と書いたら、"SpreadsheetApp.getActiveSpreadsheet();"という内容を指しますよ」と宣言していることになります。

今回は、まず操作対象となるスプレッドシートにアクセスしなくてはなりません。その場合は、まずSpreadsheetAppを使います。
SpreadsheetAppというのは、Google公式ドキュメントによると、

SpreadsheetApp. This class allows users to open Google Sheets files and to create new ones. This class is the parent class for the Spreadsheet service.

日本語にすると「このクラスを使うことで、ユーザーは、Googleスプレッドシートを開いたり、新しいシートを作ったりできます。このクラスは、スプレッドシートのサービスの親クラスにあたります」。
要するに、GASでスプレッドシートを操作するためには、とりあえず最初にSpreadsheetAppを経由しないとダメという感じ。

SpreadsheetApp経由で、まずはスプレッドシートにアクセスします。今回は、このエディターが紐づいているスプレッドシートを指定します。その場合に使うのは、「getActiveSpreadsheet」です。他にもURLやIDで指定することも可能ですが、それはまたの機会に。

従って、「var ss = SpreadsheetApp.getActiveSpreadsheet();」は、「以降、"ss"は、このエディターが紐づいているスプレッドシートを指します」という意味であると分かります。

var sheet = ss.getSheetByName("シート1");

続いてこちら。今度は、指定したスプレッドシートの中から、更に特定のシートを指定します。「getSheetByName()」という関数で、カッコ内に記載した名前を持つシートにアクセスします。今回は、デフォの「シート1」という名前のシートを指定しています。

ちなみに、上記コードで「"シート1"」というように、名前を「""」で囲っています。これで囲うことで、「その中に書いてある内容は文字列ですよ」と指定することができます。
例えば、上記で「ss」と書くと、既に2行目で定義しているので「SpreadsheetApp.getActiveSpreadsheet();」の内容になってしまいます。一方で、「"ss"」と書くと、これはそのまま「ss」という文字列であると認識されます。

以上のように、「var sheet = ss.getSheetByName("シート1");」は、「以降、"sheet"は、スプレッドシート中のシート「シート1」を指します」という意味であると分かります。

var val = sheet.getRange(1, 1).getValue();

続いてこちら。今度は、シート1の中の特定のセルにアクセスし、その値を取得。取得した値を「val」という変数に代入しています。

まず、「getRange()」で、特定シート中のセルの位置を指定しています。スプレッドシートにはタテとヨコがありますが、getRange(タテ,ヨコ)という書き方で、ヨコについてはアルファベットではなく、そのアルファベットが何番目のアルファベットか?という数字を入れます。従って、セルA1なら「1,1」、セルC6なら「6,3」です。

参照するセルを指定したら、今度はそのセルの値を取得します。これは「getValue()」でできます。割と簡単。以上で、「valは、セルA1に入っている値」となります。

sheet.getRange(1, 2).setValue(val);

最後にこちら。今度は、シート1のセルB1に、セルA1と同じ値を入力するという処理です。getRangeまでは、セルA1の値を取得した時と同じ。

最後だけ違います。さっきはgetValue()で値を「取得」したので、今度は値を「入力」します。入力はsetValue()で、カッコ内に入力したい値を指定してやればOKです。今回は、先ほどセルA1から取得した値「val」を、新たにgetRange(1,2)で指定したセルB1に入力しています。

以上のコードを走らせると、これ⇓が、

画像3


これ⇓になります。

画像4

お疲れさまでした。また次回。

この記事が気に入ったらサポートをしてみませんか?