Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
11
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

@neriai

今日から使えるGASの基礎知識とノウハウについてまとめてみた

はじめに

前回、Google Apps ScriptでGoogleカレンダーからタイムスケジュールを作成してみたを行った結果を元に簡単にGASのノウハウと使った感想についてまとめました。

関数じゃ難しい!GASを使った理由

以前を作る際にGASを使うきっかけになったのは、以下のような理由からでした。
Excelでも関数だけで行うのは難しく、マクロやVBAなどを使うことになる場合がありそうです。

セルのカラーコード

  • 取得ができない

複数の条件からそれぞれマッチする値やセル番号を取得

  • VLOOKUPや集計関数を使いこなせばできると思うが複雑
  • 計算するためのセルがいくつも必要なのでヤダ!

Googleカレンダーからデータを取得したい

  • Slackなどのサービスと連携したい

私がよく使った関数3選

こちらのソースコードで実際に使っています。

Logger

ロガークラスです。

Logger.log()

  • ログを出力します

使用例

Logger.log('apple');

SpreadsheetApp

スプレッドシートを操作するためのクラス群です。

SpreadsheetApp.getActive().getSheetByName()

  • 操作するシートを指定します

使用例

SpreadsheetApp.getActive().getSheetByName("スケジュール");

getRange()

  • 操作するセルの範囲を指定します
  • 関数操作のときのような行列番号を指定する方法と、行列を単なる数値で指定する方法の2種類があります

使用例

var sheet = SpreadsheetApp.getActive().getSheetByName("スケジュール");
var range = sheet.getRange("B3:O50");

getValues()/setValues()

  • セルの値を操作します
  • Values関数の場合は、複数のセルの値を配列形式で扱います
  • 1セルのみの場合は、getValue()/setValue()を使用します

使用例

var cells = sheet.getRange(1, 2, 1, 16);
var dateHeaders = cells.getValues();

getBackground()/setBackground()

  • セルの色を操作します
  • 引数にはカラーコードを指定します

使用例

var range = sheet.getRange("B3:O50");
range.setBackground("#FF0000");

parseXXX()

  • 演算や出力を行う際は型指定が厳密になっているので、
  • パースを行う必要があります

使用例

// int型
parseInt(1);

// float型
parseFloat(1);

// string型
String(1);

ここが楽しいよ!GAS

大方はJavaScriptなので学習コストが低い

当たり前だけどセルに関数を挿入できるのはいい

スクリプトエディタのUIが直感的

Google製サービス連携が楽

ここがつらいよ!GAS

スクリプトエディタが貧弱

  • 自動整形やインデント表示がない

6分以上の実行でタイムアウトエラー

  • イベントトリガーの場合は、6分以内の処理にしなければならない
  • 実行時刻を指定するタスクスケジューラなら大丈夫そう

foreachがちょっと変(GASというよりJavascript)

  • for(var num in numbers)だとキーが取得できない
  • numbers.forEach(function(num, key)みたいな記述になる

イベントトリガーの条件が少ない

  • セルの値が変更されたとき、とか色々ほしい

実行速度が遅い

  • 仕方なしだけどタイムアウトエラーにならないようにするのに頭を使う

修正パッチ機能とかほしい

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
11
Help us understand the problem. What are the problem?