• ログインログイン
  • 新規登録新規登録

MENU

Google Apps Scriptでプログラミングを学ぶ 第4回

連載Google Apps Scriptでプログラミングを学ぶ

Google Apps Scriptは、開発環境の設定がなくてもすぐにコーディングができる優れもののサービスです。初心者でもすぐに取り掛かれる事例を用いながら、実践に耐えうるレベルまで徐々にステップアップして学習していきます。

この記事は、株式会社らしく様からの寄稿記事となります。前回までのプログラミング学習コラムに引き続き、今回は第4回目の勉強内容です。今回から徐々にステップアップしていき、Google Apps Scriptの基本文法、中級編に入っていきます。

セクション1 関数

さて、基本文法中級編のスタートとして、このセクションでは「関数」について学びます。関数とはいくつかの処理をまとめ関数名として名前をつけて定義したものです。何度も繰り返し行われる一連の作業を関数としてまとめておき、必要に応じて関数を呼び出して使います。”ある処理の専門家”みたいなものだと思ってください。

なお関数には自分で定義したユーザ定義関数の他に、JavaScriptおよびGASで最初から用意されている関数があります。またオブジェクトを使って呼び出す関数はメソッドを呼ばれます。

ここでは関数の定義方法から使い方までを順に解説していきます。「関数」という言葉に惑わされず、概念と使い方をマスターすれば、プログラムを作る効率がアップします。

日常生活で関数をイメージしてみましょう

「関数」は、何か処理を行いたいときに、一から十までことこまかくコンピュータに指示しなくとも、必要なデータといつもおなじみの命令を伝えれば、後は勝手にコンピュータが処理してくれるという、大変お役立ちものなのです。

コンピュータの世界を離れて、「関数」の概念・イメージを掴んでいただくために、日常生活での「関数」にあたるものを幾つかご紹介します。

  • 「電子レンジで、温める秒数を指定し「スタート」ボタンを押すと、温められる」
  • 「馴染みのカフェで、「いつもの1つ」と言うと、ホットコーヒーが出される」
  • 「直径10cmの円周の長さは、電卓を使うと10cmに”π”というボタンを押すことで計算できる」

私達は、どういう仕組みで食べ物が温められるのか考えません。店員さんにホットコーヒーの作り方も一から説明しません。なぜ直径にπを掛けると円周の長さになるのかを説明できる人も少数でしょう。

このように、具体的にどのような処理がなされるのかを意識することなしに、必要なデータを渡すと定められた結果になる、そんな命令の一連の動きが「関数」です。

ここで、少し用語を覚えておきましょう。

「関数名」  : 定められた処理をしてもらうための“命令語”
「引数」  : 関数に引き渡す“必要なデータ”
「戻り値」 : 定められた処理をなされたあとに戻ってくる“結果”

前述の日常生活での例示では、それぞれ次のように整理できます。

 

関数名

引数

実行者

処理

戻り値

あたためる

10秒

電子レンジ

レンジ庫内に入っている食べ物に、マイクロウェーブを引数で与えられた時間(10秒)だけ照射する。

加熱された食べ物

いつものをもらう

1つ

店員さん

引数で与えられた個数(1つ)のコーヒーを作り渡す。

いつもこの店で注文しているホットコーヒー

円周を求める

10cm

電卓

引数で与えられた直径(10cm)にπを掛ける。

円周

さて、コンピュータの世界に戻りましょう。GASでは、この「関数」を2つの種類に大別されます。

 

種類

説明

メソッド(GAS関数)

GASで予め用意されている関数で、オブジェクトを介して実行されます。

※すでに、第2章で学習しています。また、この章のセッション4で具体的に詳しく学んでいきます。

ユーザー定義関数

あなた自身が定義できる関数で、次の書式で定義します。

function 関数名(引数) {

 処理

}

セクション2 ユーザー定義関数

このセクションでは、セクション1で学んだ「関数」のうち、自分で作れる関数「ユーザー定義関数」について学びます。

「何度も登場する処理だけれども、GAS関数には準備されていない。」そんな処理をする関数を、自分で作ることができるのが「ユーザー定義関数」です。

ユーザー定義関数の基本的な文法は次の通りです。

 

書式

function 関数名(引数) {

 処理

}

あれ、この形に見覚えありませんか。今までの例題GASの始まりと終わりが、いつもこの“function 名前(){ 処理 }”となっていること、お気づきでしたか。

実は、GASそのものが「ユーザー定義関数」と言えるのです。なぜならば、GASは「繰り返し発生する業務や仕事は極力コンピュータにお願いして、人の時間を創出するためのツール」であり、これはまさにユーザー定義関数です。

ちょっと複雑になってきましたが、GASとユーザー定義関数とメソッド(GAS関数)はこんなイメージです。

functionで始まるユーザー定義関数は、一つのGASの中に複数作ることができ、あるユーザー定義関数の中で別のユーザー定義関数に仕事を依頼することができます。

例えば、二つの数字を足し算し、その結果をスプレッドシートにメッセージボックスとして表示するというGASを作る場合、このようになります。

関数myfunctionを実行すると、計算結果が表示されたメッセージボックスが順番に5つ表示されます。

※実際は、一つのメッセージボックスの「OK」ボタンを押下後、次のボックスが表示されます。

私は、GASを作成するときの基本は、「とにかく楽する!」ことだと思っています。楽をするために、同じ処理は極力まとめて「ユーザー定義関数」を作ってコンピュータにやってもらいましょう。

セクション3 配列

このセクションでは、プログラムでデータを扱う際に、一時的なデータの保存場所として、とても便利な「配列」について学びます。

配列とは、ある変数の中に複数の値を格納し、必要に応じて出し入れできるというものです。

配列の中は、格納する値を、番号の付いた箱のようなものに入れて管理できるようになっています。この箱のようなものを「要素」と呼びます。

※要素の番号は0番目から始まります。

書式

変数 = [“値1”, “値2”, “値3”, ・・・, “値n”]

配列の新規作成方法には、いくつかの方法があります。

 

#

方法

サンプル

解説

1

配列作成時に値を初めから格納する場合

var test = [“国語”, “算数”, “理科”, “社会”];

2

配列を作成し、後程値を設定する方法

配列の要素を指定する方法

var test = new Array();

test[0] = “国語”;

test[1] = “算数”;

test[2] = “理科”;

test[3] = “社会”;

配列名[要素番号]という形式で、値を格納したり参照します。

3

配列を作成し、後程値を設定する方法

順番に要素を追加していく方法

var test = new Array();

test.push(“国語”);

test.push(“算数”);

test.push(“理科”);

test.push(“社会”);

pushメソッドを使う方法です。

順番に詰めて格納されます。

※No.2の方法では、値をとびとびに格納できます。

配列内の値の参照のしかたなどは、こちらです。

 

目的

書式

サンプル

解説

値参照

配列名[要素番号];

var result = test[0];

配列の要素数参照

配列名.length;

var num = test.length;

では、例題を用いて、理解を深めましょう。

Aさんは「国語」「算数」「理科」「社会」の4科目のテストを受けました。それぞれの点数は次のとおりでした。

国語 : 90点

算数 : 70点

理科 : 80点

社会 : 100点

スプレッドシート上に、各科目の点数を表示するGASを作りましょう。

function arraySample() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getActiveSheet();

// 配列を作ると同時に、値をセット

 var subject = ["国語", "算数", "理科", "社会"];

// 配列を作成

 var score = new Array();

// 配列の要素を挿入

 score.push(90,70,80,100);

// 配列の長さ(要素数)を取得

 var length = subject.length;

// 配列の要素数の数だけ、セルにデータを出力

 for(var i = 0; i < length; i++) {
 sheet.getRange("A" + (i+1)).setValue(subject[i]);
 sheet.getRange("B" + (i+1)).setValue(score[i]);
 }
}

実行結果

セクション4 オブジェクトとプロパティ

先ほどの教科ごとの点数を配列で扱った例を、オブジェクトで表現してみます。同じような目的の値をまとめて管理する場合にはオブジェクトを使うと便利です。書式は以下のようになります。

書式

変数 = {“文字列1” : 値1, “文字列2” : 値2, “文字列2” : 値2, ・・・ , “文字列n” : 値n}

var result = {'国語' : 90, '算数' : 70, '理科' : 80, '社会' : 100};

もしくは、プロパティごとに改行して書くとわかりやすいかもしれません。
var result = {'国語' : 90,
 '算数' : 70,
 '理科' : 80,
 '社会' : 100
};

“:”(コロン)の左側の文字列で、データを格納する入れ物のことを、プロパティと呼びます。

オブジェクトは任意の数の値を管理することができます。これは配列の場合と同じですが配列では値が順番にならべられて管理されており番号が割り当てられています。これに対しオブジェクトでは値に順番はありません。その代わりそれぞれの値には名前が付けられています。

オブジェクトを使う場合の主なメリットは以下のとおりです。

  • オブジェクトを使って値を管理すると、関連する複数の値を1つの変数でまとめて管理することができます。
  • 値に割り当てられたプロパティ名を使った処理が行えます。
  • オブジェクト内の値の部分に{ }を挿入することで、階層表現も可能です。
  • 配列の要素として、オブジェクトを設定することも可能です。

セクション3で学んだ配列のサンプルはオブジェクトを使って書き直すと次のように記述することができます。

function objectSample() {
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getActiveSheet();

// 配列

 var subject = ["国語", "算数", "理科", "社会"]

// オブジェクト

 var obj = {"国語" : 90, "算数" : 70, "理科" : 80, "社会" : 100};

 var length = subject.length;

 for(var i = 0; i < length; i++) {

// 配列の要素をもとに値をセット

 sheet.getRange("A" + (i+1)).setValue(subject[i]);

// 配列の要素からなるプロパティをもとに値をセット

 sheet.getRange("B" + (i+1)).setValue(obj[subject[i]]);
 }
}

 今回は以上で終了です。次回からは、オブジェクト操作とメソッドについて学んでいきます。

株式会社らしくのインターン応募はこちら

オススメ記事一覧

もっと見る
完全無料!

1で登録完了!

エンジニアの仕事・年収や選考ノウハウ記事が読めるほか、
会員にはプログラミング講習やES・面接対策などリアルな無料サポートも充実。
ここだけの求人情報も多数。

今すぐ新規会員登録
Page Top