「GoogleスプレッドシートにGASで機能追加をしてみよう」という別の記事で、関数を使って機能を追加する例を紹介しました。
ご存知の通り、スプレッドシートには多くの関数や、条件付き書式、データの入力規則という機能が用意され、これらを使えばスプレッドシートを使いやすくカスタマイズできるのが大きな魅力ですよね。
そして実は、Googleスプレッドシートをはじめとして、Googleのウェブアプリ(Googleドキュメント、Googleフォーム、Gmailなど)はプログラミングで機能を強化することもできます。Googleのウェブアプリをお互いに自動的に連携することも。
そしてプログラミングをするときに使うのが Google Apps Script (GAS) と呼ばれているプログラミング言語です。
仕事でGoogleスプレッドシートを使っているけど「もう少し便利にできないかな?」とか、「これってできるのかな?」っていつも思っている人のために、大切なものの見方を説明します。
方向性も定めずチャレンジして消耗してしまったり、意味のないことを開発者に頼んで時間を無駄にしないためにも、土台となる知識を持っておくと安心できますよね。
スクリプト(プログラム)のコードなど、技術的なことを解説すると半端ない長さの記事になるので、それはやめておきますが、どんな技術を使っているのかということだけは簡単に説明します。
GASで機能追加って例えばどんなのがあるの?
1機能追加の例を3つ、3機能追加の例を1つ紹介します。
いずれもいろいろな業種でよく使わているものです。
コードはここでは紹介しませんが、どれも、数3,40行から100行程度のコードで書かれたスクリプト(プログラム)で実現しています。
① ボタン一発でアーカイブ移動
「進行中」シートで進行中タスクのリストを管理しているとします。
そして、「進行中」シートは別に「実績」シートを用意し、完了したタスクをアーカイブとして記録しておきたいと思ったとします。
こんなときは次の画像のように、まず「進行中」シートに
・「完了確認」列を用意しチェックボックスを配置
・「完了タスクをアーカイブ」ボタンを用意
しておきます。
そして、アーカイブしたい仕事にチェックをいれ、「完了タスクをアーカイブ」ボタンをクリックするだけで「実績」シートにアーカイブができるようにしてしおくと良いですね。
ボタンを押すとスクリプト(プログラム)が実行されます。
そして「実績」シートを見てみると最後の行にアーカイブされていることがわかります。
この例では、チェックが入った行を「実績」シートに移動し、元のシートから削除する関数をGASでプログラミングして機能実装しています。
② Gmail下書き一括作成
定型文のメールの下書きを一斉に作りたいということありますか?
そういう人にもってこいの機能ですよね。
まず、「メール内容設定」というシートを用意し、テンプレートとなる文章をセルに入力しておきます。
ここでは顧客に対して請求のお知らせを送る場合を想定して、
******
件名
ご請求内容のお知らせ {{商品名}}
本文
{{顧客名}}
いつもお世話になっております。 今月のご利用料金は {{金額}} です。 ご確認をお願いいたします。
******
というテンプレートを用意しておきます。
そして、テンプレート中の{{ }} の部分にシートに格納されているデータを埋め込む設計にします。
また、「請求リスト」というシートで一件一件の請求情報を管理するようにします。
このシートでは、下書きの作成対象にしたい「請求」を選べるようにチェックボックスを用意し、チェックを入れた「請求」に対して一括でメールの下書きを作るボタンを用意します。
下書きを作りたい案件にチェックを入れ「下書き作成」ボタンをクリックします。
ボタンをクリックするとスクリプト(プログラム)が実行され、一括で下書きが作成されます。
Gmailを開いて「下書き」を見てみると、チェックを入れた「請求」すべての下書きができていることがわかります。
この例では、チェックが入った行を取得してテンプレートに合わせて適切な形に整えてからGmailの下書きとして保存する関数をGASでプログラミングして機能実装しています。
③ Googleカレンダーへ予約一括登録
「予約リスト」というシートですべての予約を一覧にして管理しているとします。
そして、受け入れることにした予約だけを選んでGoogleカレンダーへ一括で登録したいとします。
まず、「予約リスト」シートに「登録」列を用意し、チェックボックスを配置しておきます。また、「カレンダーへ一括登録」というボタンも用意します。
登録したい予約にチェックを入れ「カレンダーへ一括登録」ボタンをクリックします。
スクリプト(プログラム)が実行されます。
スクリプトの実行が終わると「カレンダーへの登録が完了しました。」というダイアログが現れます。
カレンダーに登録した予約の「ステータス」列に「登録済」と入力されます。
Googleカレンダーを開いてみると、チェックを入れた予約がすべて登録されていることがわかります。
この例では、チェックが入った行を取得して適切な形に整えてからカレンダーに登録する関数をGASでプログラミングして機能実装しています。
④ 特定シートのPDF化と保存
「見積リスト」シートで見積番号を付けて見積を管理しているとします。
普通は一つの見積には取引対象の品目が複数あるので、「見積明細」シートを用意して、見積番号を使って紐付けて管理することにします。
見積書を発行するためのテンプレートを書き込み「見積印刷」シートを作ります。
そして、見積番号を選択するプルダウンメニューと「PDF出力」ボタンを用意します。
プルダウンメニューを開き、出力したい見積番号を選択します。
スクリプト(プログラムが)動き出し、「必要な情報を探します」というダイアログが現れます。
見積番号を使って必要な情報が「見積リスト」シートと「見積リスト」シートから探し出され、「*件の明細を反映します」というダイアログが現れます。
テンプレートに必要な情報が埋め込まれます。
そして最後に「PDF出力」ボタンをクリックするとスクリプト(プログラム)が動き出します。
スクリプト(プログラム)の実行が終わると「***.pdf」を作成し、フォルダに保存しました」というダイアログが現れます。
Googleドライブで出力されたファイルを探し開いてみると、見積書がPDFとして作成されていることがわかります。
この例では、
・「見積リスト」からXLOOKUP関数などで必要な情報を引っ張ってきて表示
・「見積明細」から必要な情報を探して見積書テンプレートに埋め込む関数をGASでプログラミング
・PDFを発行する関数をGASでプログラミング
ということを行ない3つの機能で全体の機能を実装してます。
GASで実装したほうが良いのはどんなとき?
ご自分で機能を実装したり、開発者に依頼するときの判断材料として読んでください。
1. 転記・削除を自動化
関数は「今あるデータを計算して表示する」ことは得意ですが、「表示・非表示」はできても、行そのものを別シートへ物理的に移動させることはできません。
関数はセルに値を「書き込む」ことはできても、自分自身の値を「消去」することができません。
「データ(行)を移動・保存・削除」する動作はGASが向いています。
・ボタン1つで別シートへ転記
「入力用シート」に入力したデータを、「蓄積用シート(データベース)」の最後尾に1行ずつ追加する。
チェックボックスを入れた行を、ボタン一つで「実績シート」の最後尾に移動させ、元のシートからは削除する。
・入力フォームのリセット
入力用のセルに入力された値をボタン一つで消去し、次の入力に備える。
・重複チェック&お掃除
名簿の中で重複している行を見つけ出し、一括で削除(または色付け)する。
・特定条件の行だけを抽出
「完了」フラグが立った行だけを別シートにコピーする。
2. 出力・通知を自動化
関数にはメールを作成・送信する機能がありません。
Googleカレンダーを操作するにはGASによるプログラミングが必要です。
スプレッドシートの標準機能では手動で「印刷→PDF保存」が必要ですが、ファイル名を自動的に付けて保存するにはGASによるプログラミングが必要です。
・定型文のGmail一括作成(下書き保存)
シート上の宛名と本文を組み合わせて、下書きを生成する。
・Googleカレンダーへの予定登録
シート上の「日付」と「イベント名」をGoogleカレンダーボタンひとつで登録する。
・PDF変換(単一シート)
3. 管理・整理を自動化
運用のミスを防ぐための機能です。
・シートの自動生成と名称変更
雛形シートをコピーし、名前に「今日の日付」をつけて新しく作成する。
・期限チェック&色付け
期限が3日後に迫っている行に、自動で背景色を塗る。
4. 「時間」や「イベント」をきっかけに動く機能
関数は「セルが書き換わった時」に計算されますが、GASは「人間が触っていない時」に動かせます。
関数はシートを開いていないと動作しません。GASの「トリガー機能」を使えば、PCを閉じていても深夜に実行可能です。
フォーム連動シートに関数を仕込んでおくこともできますが、行が追加される際の挙動が不安定になりがちです。GASなら確実に制御できます。
・期限リマインド通知
毎日20時にシートをチェックし、「期限が3日以内」のものがあればメールやチャットで通知する。
・Googleフォーム送信時の自動処理
フォームが送信された瞬間に、回答内容を特定形式に整えて別のシートに転記する。
5. 「変更履歴」の記録(ログ取り)
関数では「過去に何という値だったか」という履歴を保持できません。
スプレッドシートの標準の変更履歴は便利ですが、誰が何をしたか追うのが大変なことも。
・ステータス更新ログの自動記録
「未着手」を「完了」に変えた瞬間に、隣のセルへ「誰が・いつ・何から何に変えたか」を自動で書き込む。
スプレッドシートに元から備わっている関数で十分なケースは
一般的に、スプレッドシートの関数はGASで書いたスクリプトの実行より処理が高速です。
以下再び、ご自分で機能を実装したり、開発者に依頼するときの判断材料として読んでください。
1. 「表示」を変えるだけの場合(計算・抽出)
データの中身そのものを書き換えるのではなく、「今あるデータから答えを出して表示するだけ」なら、関数が最適です。
・別シートからのデータ引用、特定の条件でリストを絞り込む、ピボットテーブルや SUMIFS 関数で対応可能な複雑な集計、姓と名を結合するのような文字の整形
2. 「見た目」を変えるだけの場合(色付け)
「期限が切れたら赤くしたい」といった要望は、GASよりも標準機能の方が圧倒的に軽くて優秀です。
・特定の文字が入ったら行全体に色をつけるなどは条件付き書式、****交互の背景色で表を見やすくするだけなら標準機能。
3. 「入力ミス」を防ぎたいだけの場合
「決まった文字以外入れさせたくない」という制御は、GASでコードを書く必要はありません。
・データの入力規則で プルダウンリスト(ドロップダウン)の作成、「数値以外は入力禁止」「未来の日付は入力禁止」などの制限。
4. 「シート間の自動反映」をしたい場合(参照)
「Aシートに入力したらBシートにも反映させたい」という要望は、コピー(実体の複製)が必要か、参照(映し出し)だけでいいかで判断します。
・IMPORTRANGE関数で別のファイルからリアルタイムでデータを引っ張ってくる。
GASにするか関数にするか迷ったら
とりあえず、自分自身に次の質問をしてみてください。
「その動作は、『今のデータを元に計算結果を表示したい』だけ? それとも『データを別の場所に保存したり、誰かにメールを送ったりといった【アクション(行動)】を起こしたい?」
そしてシンプルな判断基準は次の通り
表示したいだけ ➔ 【関数】
アクションを起こしたい ➔ 【GAS】(関数の限界を超えた自動化)
では今回の話を振り返っておきましょう
今回は、Google Apps Script (GAS) と呼ばれているプログラミング言語を使ってどんな機能追加ができるのかということ、スプレッドシート関数や条件付き書式、データの入力規則やGoogle Apps Script の使い分けの判断について紹介しました。どうでしたか?なんとなく、全体像は見えてきましたか?
※ Google Apps Script は ウェブサイトを作成するときに使われるJavaScriptという言語を元にしてできている言語です。ですから、Google Apps Script を使うためには、ある程度、JavaScript の基本部分を知っておく必要があります。
最後に宣伝です
えーと、ここは「ココナラ」でしたね。ココナラにいくつかスプレッドシート関係のサービスを出品しています。
行き詰まったらぜひご利用ください。よろしくおねがいします。