GASでスプレッドシートの機能追加ってどんなことができるの?

記事
IT・テクノロジー
「GoogleスプレッドシートにGASで機能追加をしてみよう」という別の記事で、関数を使って機能を追加する例を紹介しました。


ご存知の通り、スプレッドシートには多くの関数や、条件付き書式、データの入力規則という機能が用意され、これらを使えばスプレッドシートを使いやすくカスタマイズできるのが大きな魅力ですよね。

そして実は、Googleスプレッドシートをはじめとして、Googleのウェブアプリ(Googleドキュメント、Googleフォーム、Gmailなど)はプログラミングで機能を強化することもできます。Googleのウェブアプリをお互いに自動的に連携することも。

そしてプログラミングをするときに使うのが Google Apps Script (GAS) と呼ばれているプログラミング言語です。

仕事でGoogleスプレッドシートを使っているけど「もう少し便利にできないかな?」とか、「これってできるのかな?」っていつも思っている人のために、大切なものの見方を説明します。

方向性も定めずチャレンジして消耗してしまったり、意味のないことを開発者に頼んで時間を無駄にしないためにも、土台となる知識を持っておくと安心できますよね。

スクリプト(プログラム)のコードなど、技術的なことを解説すると半端ない長さの記事になるので、それはやめておきますが、どんな技術を使っているのかということだけは簡単に説明します。

GASで機能追加って例えばどんなのがあるの?


1機能追加の例を3つ、3機能追加の例を1つ紹介します。

いずれもいろいろな業種でよく使わているものです。

コードはここでは紹介しませんが、どれも、数3,40行から100行程度のコードで書かれたスクリプト(プログラム)で実現しています。

① ボタン一発でアーカイブ移動


「進行中」シートで進行中タスクのリストを管理しているとします。
ボタン一つでアーカイブ移動_0.png


そして、「進行中」シートは別に「実績」シートを用意し、完了したタスクをアーカイブとして記録しておきたいと思ったとします。

ボタン一つでアーカイブ移動_1.png


こんなときは次の画像のように、まず「進行中」シートに

・「完了確認」列を用意しチェックボックスを配置
・「完了タスクをアーカイブ」ボタンを用意

しておきます。

そして、アーカイブしたい仕事にチェックをいれ、「完了タスクをアーカイブ」ボタンをクリックするだけで「実績」シートにアーカイブができるようにしてしおくと良いですね。


ボタン一つでアーカイブ移動_2.png



ボタンを押すとスクリプト(プログラム)が実行されます。

ボタン一つでアーカイブ移動_3.png


そして「実績」シートを見てみると最後の行にアーカイブされていることがわかります。

ボタン一つでアーカイブ移動_4.png

この例では、チェックが入った行を「実績」シートに移動し、元のシートから削除する関数をGASでプログラミングして機能実装しています。

② Gmail下書き一括作成


定型文のメールの下書きを一斉に作りたいということありますか?

そういう人にもってこいの機能ですよね。

まず、「メール内容設定」というシートを用意し、テンプレートとなる文章をセルに入力しておきます。

ここでは顧客に対して請求のお知らせを送る場合を想定して、

******

件名

ご請求内容のお知らせ {{商品名}}

本文

{{顧客名}}

いつもお世話になっております。 今月のご利用料金は {{金額}} です。 ご確認をお願いいたします。

******

というテンプレートを用意しておきます。

そして、テンプレート中の{{  }} の部分にシートに格納されているデータを埋め込む設計にします。

Gmail下書き一括作成_0.png


また、「請求リスト」というシートで一件一件の請求情報を管理するようにします。

このシートでは、下書きの作成対象にしたい「請求」を選べるようにチェックボックスを用意し、チェックを入れた「請求」に対して一括でメールの下書きを作るボタンを用意します。

Gmail下書き一括作成_1.png

下書きを作りたい案件にチェックを入れ「下書き作成」ボタンをクリックします。

Gmail下書き一括作成_2.png

ボタンをクリックするとスクリプト(プログラム)が実行され、一括で下書きが作成されます。

Gmail下書き一括作成_3.png



Gmailを開いて「下書き」を見てみると、チェックを入れた「請求」すべての下書きができていることがわかります。
Gmail下書き一括作成_4.png


この例では、チェックが入った行を取得してテンプレートに合わせて適切な形に整えてからGmailの下書きとして保存する関数をGASでプログラミングして機能実装しています。

③ Googleカレンダーへ予約一括登録


「予約リスト」というシートですべての予約を一覧にして管理しているとします。

そして、受け入れることにした予約だけを選んでGoogleカレンダーへ一括で登録したいとします。

まず、「予約リスト」シートに「登録」列を用意し、チェックボックスを配置しておきます。また、「カレンダーへ一括登録」というボタンも用意します。

Googleカレンダーへ予約一括登録_0.png


登録したい予約にチェックを入れ「カレンダーへ一括登録」ボタンをクリックします。
Googleカレンダーへ予約一括登録_1.png

スクリプト(プログラム)が実行されます。
スクリプトの実行が終わると「カレンダーへの登録が完了しました。」というダイアログが現れます。


Googleカレンダーへ予約一括登録_2.png


カレンダーに登録した予約の「ステータス」列に「登録済」と入力されます。

Googleカレンダーへ予約一括登録_3.png

Googleカレンダーを開いてみると、チェックを入れた予約がすべて登録されていることがわかります。

Googleカレンダーへ予約一括登録_4.png


この例では、チェックが入った行を取得して適切な形に整えてからカレンダーに登録する関数をGASでプログラミングして機能実装しています。

④ 特定シートのPDF化と保存


 「見積リスト」シートで見積番号を付けて見積を管理しているとします。
特定シートのPDF化と保存_0.png


普通は一つの見積には取引対象の品目が複数あるので、「見積明細」シートを用意して、見積番号を使って紐付けて管理することにします。

特定シートのPDF化と保存_1.png

見積書を発行するためのテンプレートを書き込み「見積印刷」シートを作ります。

そして、見積番号を選択するプルダウンメニューと「PDF出力」ボタンを用意します。

特定シートのPDF化と保存_2.png


プルダウンメニューを開き、出力したい見積番号を選択します。

特定シートのPDF化と保存_3.png


スクリプト(プログラムが)動き出し、「必要な情報を探します」というダイアログが現れます。

特定シートのPDF化と保存_4.png


見積番号を使って必要な情報が「見積リスト」シートと「見積リスト」シートから探し出され、「*件の明細を反映します」というダイアログが現れます。

特定シートのPDF化と保存_5.png


テンプレートに必要な情報が埋め込まれます。

特定シートのPDF化と保存_6.png


そして最後に「PDF出力」ボタンをクリックするとスクリプト(プログラム)が動き出します。

特定シートのPDF化と保存_7.png


スクリプト(プログラム)の実行が終わると「***.pdf」を作成し、フォルダに保存しました」というダイアログが現れます。

特定シートのPDF化と保存_8.png


Googleドライブで出力されたファイルを探し開いてみると、見積書がPDFとして作成されていることがわかります。

特定シートのPDF化と保存_9.png



この例では、

・「見積リスト」から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 の基本部分を知っておく必要があります。

最後に宣伝です


えーと、ここは「ココナラ」でしたね。ココナラにいくつかスプレッドシート関係のサービスを出品しています。

行き詰まったらぜひご利用ください。よろしくおねがいします。


サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す ココナラコンテンツマーケット ノウハウ記事・テンプレート・デザイン素材はこちら