業務で繰り返し行う操作や処理などを自動化できるのがマクロです。マクロを活用すれば業務を効率的に進めることができるでしょう。
マクロでは、ウィンドウを表示したりカスタム関数を作成したりボタンで処理を実行させたりすることが可能です。そのため、さまざまな動作を自動で行うことができます。またデータを自動的に編集したり、送信したりすることも可能です。
昨今のビジネスシーンでは業務の効率化が必須となっており、マクロを活用することで有利に業務を進めることができると言えるでしょう。
この記事では、スプレッドシートのマクロについての概要、作成方法などを紹介します。
チャット一括管理アプリ「OneChat」が今なら初月無料!!
OneChatのダウンロードはこちらから
スプレッドシートでのマクロ機能の魅力
スプレッドシートでは、マクロを使用することができます。マクロを使えば作業を自動化したり他のGoogleアプリと連携したりすることが可能なため、さまざまな業務に利用できると言えるでしょう。
昨今では、Googleのサービスを利用する企業が増えてきています。Googleが提供するクラウドサービスをGoogle Workspaceと言いますが、Google Workspaceを導入している企業数は全世界で500万社以上です。万全なセキュリティ、タブレットやスマートフォンからの利用、他のシステムと連携しやすいなどの理由が導入企業増加の要因と考えられます。
無料で利用することができるため、複数のGoogleサービスやアプリを使用して業務を行っている方も多いでしょう。スプレッドシートのマクロを利用すれば業務の自動化などが可能となるため、生産性の向上に役立ちます。
参考URL:システムクレイス「Google Workspace(旧G Suite)の導入実績や導入企業数」
Googleスプレッドシートのマクロとは?
スプレッドシートとは、Googleのサービスの一つで表計算ができるアプリのことですWeb上でサービスが提供されているため、すべての操作はWeb上で行います。
スプレッドシートのマクロとは、スプレッドシートに搭載されているマクロ機能のことです。マクロとは、単独の動作や複数の動作を一度に実施することができる機能を指しています。複数の操作を記憶して自動で動作させたり、スケジュールどおりに処理を起動させたり、独自の動きを組み込んだりすることが可能です。
一般的にマクロと言えば、Excelのマクロを思い浮かべる人も多いかもしれません。Excelのマクロはデータの計算や分類、集計、データの転送などさまざまな処理を作成し自動で実行させることが可能です。このExcelのマクロと同じようなことをスプレッドシートで行うことができます。
さらにスプレッドシートでは、他のアプリと連携することも可能です。GoogleカレンダーやGoogleフォーム、Gmailなどと連携して、データのやり取りなどができます。これらの機能を実現するのが、Google Apps Script(GAS)と呼ばれるプログラミング言語です。
関連記事:GASを利用したスプレッドシートでURLを取得する関数を紹介!
マクロを利用する業務効率向上のポイント
スプレッドシートのマクロを利用すれば、多くの業務で作業の自動化が可能です。例えばスケジュール管理やデータ編集、書類の作成などが自動でできるので、業務効率化に繋がります。業務効率向上のためのポイントとしては次の事柄が挙げられます。
業務効率向上のポイント | 説明 |
決まった操作の自動化 | マクロを利用すればスプレッドシートでの操作を自動化することが可能です。手作業で実施していた操作を自動化することで、作業の効率化ができます。 |
手作業を自動化 | 手作業で計算したりデータを移行したりする業務がある場合、ボタンクリックで自動処理を行うプログラムを作成しておけば自動化が可能となります。自動処理を行うプログラムを利用すれば、計算ミスなどが起きないため、品質も確保することができるでしょう。 |
データの生成を自動化 | 例えば、日次ごとのデータを月次集計データに取り込む作業を自動化することができます。マクロを利用することで、ブック間のデータ移行も容易に行うことが可能です。 |
進捗管理を自動化 | スプレッドシートに実施作業の一覧と期日をまとめたWBSを作成すれば、進捗が遅れている作業や完了した作業を自動的に通知することが可能です。1つずつの作業を目視で確認していく必要がなくなり、業務の効率化につながります。 |
データ取集を自動化 | Webページからデータを収集する必要のある場合、スプレッドシートのマクロを利用すれば自動で取り込むことが可能です。例えばGoogle検索結果からタイトルを取得したり、ディスクリプションを取得したりすることができます。 |
スプレッドシートでマクロを作成・実行する方法
スプレッドシートでは、操作を記録してマクロを作成したり、プログラミングのような形で処理をマクロに書き込んだりして作成することができます。以降はマクロの作成方法と実行方法についての説明です。
マクロの作成手順:スクリプトエディタを使って
スプレッドシートのマクロは、スクリプトエディタにプログラムを記述します。そのため、まずはスクリプトエディタを開くことが必要です。
- スプレッドシートを開きます。
- 上にあるメニューから「ツール」-「スクリプトエディタ」を選択してください。
- 別のタブにスクリプトエディタが開きます。
すでにマクロを登録している場合や、操作をマクロに記録している場合、スクリプトエディタにプログラムが記述されています。マクロを何も登録していない場合は、「コード.gs」項目が出てきて空の処理が用意されている状態です。空の関数は「function myFunction() {}」の記述になっています。
スクリプトエディタにプログラムを記述していくことで、マクロを作成することが可能です。すでに登録されているマクロの動きを変更することもできます。独自の関数を作成して業務に沿った処理を実行することも可能です。
例えば、西暦を和暦に変えたり、金額を税込に変換したり、入力日付が予め登録していた期間に一致しているかどうかを判定したり、さまざまな処理を記述することができます。
マクロの自動実行設定:トリガー機能を活用
スプレッドシートのトリガーとは、イベントが起きたときにマクロを実行する機能です。通常マクロを実行する場合、「実行ボタン」を押す必要があります。しかしトリガー機能を活用することで「実行ボタン」を押さなくても、自動で実行が可能となる機能です。
トリガー機能には次の2種類があります。
トリガー機能 | 説明 |
シンプルトリガー | スプレッドシートやGoogleシートに紐づけたトリガー機能になります。例えばスプレッドシートの内容が変更された場合にマクロを実行するなどです。簡単に設定できますが、いくつかの制約も存在しています。 |
インストーラブルトリガー | 自分で自由に設定を行うことができるトリガー機能です。スプレッドシートやGoogleシートに紐づけなくても、起動することができます。スプレッドシートで設定するのではなく、Google Apps Script(GAS)でプロジェクトを作成して設定する方法です。 |
シンプルトリガーの設定方法としては、次の手順です。
- スプレッドシートを作成します。
- スクリプトエディタを起動してください。
- スクリプトエディタにトリガー起動のプログラムを記述します。
イベントに対応した関数が用意されているので、トリガーにしたい関数を記述する形です。
スクリプトエディタに記述できるシンプルトリガーの関数は、次のものがあります。
関数 | 説明 |
onOpen( e ) | スプレッドシートやフォームなどを利用者が開くことをトリガーとします。 |
onInstall( e ) | 利用者がアドオンを組み込んだことをトリガーとします。 |
onEdit( e ) | スプレッドシートの値が変化したことをトリガーとします。 |
onSelectionChange( e ) | スプレッドシートの選択内容を変更したことをトリガーとします。 |
doGet( e ) | Webアプリにアクセスしたり、HTTP GETリクエストをプログラムが送信したりしたことをトリガーとします。 |
doPost( e ) | WebアプリにHTTP POSTリクエストをプログラムが送信したことをトリガーとします。 |
Apps Scriptでの操作と機能追加方法
Google Apps Scriptで設定するトリガーを、インストーラブルトリガーと言います。設定手順は次の通りです。
- GASでプロジェクトを作成します。既存のプロジェクトでも構いません。
- トリガーが発生した場合に実行する処理を作成しておきます。
- GASのウィンドウの左にある「時計マーク」アイコンを押します。
- ウィンドウ右下にある「トリガーを追加」ボタンを押してください。
- トリガーの設定ダイアログが表示されるので、条件を設定します。
スプレッドシートをトリガーに指定することも可能です。 - スプレッドシートを指定した場合、イベントの種類を選択してください。
イベントの種類には「起動時」「編集時」「変更時」「フォーム送信時」があります。
インストーラブルトリガーの設定は以上となります。
インストーラブルトリガーでは、実行を一時停止することはできません。そのためトリガーの実行を停止する場合は、トリガーを削除するか「何もしない処理」を作成してトリガー登録する必要があります。
関連記事:Googleスプレッドシートのマクロとは?できることやボタンの作成方法を解説
スプレッドシートとExcelのマクロ違い
スプレッドシートとExcelは、どちらも表計算を得意とするアプリケーションです。そしてどちらもマクロ機能を搭載しています。マクロ機能を活用することで、業務のさまざまな作業を自動化することができるため、業務効率化につながると言えるでしょう。ここでスプレッドシートとExcelのマクロの違いについて説明します。
機能比較:Googleスプレッドシート vs Excel
スプレッドシートとExcelでは、動作環境が異なります。スプレッドシートはクラウド環境で動作するためWebブラウザ上で操作する形です。そのためインターネットに接続していることが前提となります。複数メンバーで同じファイルを閲覧したり編集したりすることが可能です。
一方Excelはパソコン内の環境で動作する形となります。ローカル環境のため、基本的には複数メンバーが編集することはできません。このようにスプレッドシートとExcelでは機能に違いがあります。下表に主な機能の違いをまとめました。
機能 | スプレッドシート | Excel |
動作環境 | クラウド環境のためインターネット接続が必須です。 | パソコンのローカル環境です。 |
プログラミング言語 | JavaScriptベースのGoogle Apps Scriptでマクロを実行します。 | Visual BasicベースのVBAでマクロを実行します。 |
トリガー設定 | イベントや日時を指定することができます。クラウド環境で動作するため、パソコンが起動していなくても実行可能です。 | パソコンのイベントを指定することができます。そのためパソコンの起動が必須です。 |
Webデータ収集 | データを収集する場合「IMPORTHTML関数」を使用します。取得できるデータ量に制限はありません。 | データ取集する場合「WEBSERVICE関数」を使用します。取得できるデータ量に制限があるので注意が必要です。 |
オンライン環境でのマクロ操作 | クラウド環境のためオンラインでのマクロ操作には制限はありません。 | Excel Onlineサービスでマクロを動作させることができますが、機能に制限があります。 |
マクロ作成言語:Apps ScriptとVBAの違い
Apps ScriptとVBAの大きな違いは、プログラミング言語の違いです。Apps Scriptは「JavaScript」がベースとなっており、VBAは「Visual Basic」がベースとなっています。そのため命令の構文が異なる状況です。
またApps Scriptでは注意点があります。「6分の壁」と呼ばれるものです。マクロの実行が完了するまでに6分以上の時間がかかる場合、エラーになってしまいます。そのため時間の掛からないような処理にしたり、分割したりするなどの対応が必要です。
Apps ScriptとVBAではプログラミング言語は異なりますが、オブジェクトの階層は同じような構造となっています。
項目 | Apps Script | VBA |
オブジェクトの階層構造 | SpreadSheetApps ・SpreadSheet ・Sheet ・Range / Cells ・Value | Application ・Workbook ・Sheet ・Range / Cells ・Value |
どちらもオブジェクトの階層構造が似ているため、一方に慣れている場合はプログラミングしやすいと言えるでしょう。
よく使われるマクロの具体例とコード
Apps Scriptでよく使われるマクロのコードを紹介します。
データ整形や自動集計のマクロ例
Apps Scriptでデータ整形や自動集計をすることが可能です。
データ整形
日時を決まったフォーマットで表示する場合は次のコードになります。尚、「//」の行はコードを説明するコメント部です。
//現在日時を取得
var today = new Date();
//「yyyy-MM-dd HH:mm:ss」型のフォーマットに整形
var todayData = Utilities.formatDate(today, ‘JST’, ‘yyyy-MM-dd HH:mm:ss’);
実行結果は次のような表示になります。
2023-10-01 07:01:25
また以下のように指定すれば、日本語のフォーマットに整形することが可能です。
//現在日時を取得
var today = new Date();
//「yyyy-MM-dd HH:mm:ss」型のフォーマットに整形
var todayData = Utilities.formatDate(today, ‘JST’, ‘yyyy年MM月dd日 HH時mm分ss秒’);
実行結果は次のような表示になります。
2023年10月01日 07時01分25秒
自動集計
すでに作成している表のデータを集計し、別のシートに表示することが可能です。
例えば「シート1」に次の表を作成しているとします。
A | B | C | D | E | |
1 | 日付 | 銘柄 | 取得価格 | 評価額 | 評価損益 |
2 | 2023/1/1 | 海外株 | 10,000 | 13,000 | 3,000 |
3 | 2023/1/1 | 国内株 | 7,000 | 9,000 | 2,000 |
4 | 2023/2/1 | 海外株 | 11,000 | 12,000 | 1,000 |
5 | 2023/2/1 | 国内株 | 8,000 | 10,000 | 2,000 |
6 | 2023/3/1 | 海外株 | 12,000 | 12,000 | 0 |
7 | 2023/3/1 | 国内株 | 9,000 | 8,000 | -1,000 |
「シート2」に次のような集計結果を表示します。
海外株式 | 国内株式 | |||||
日付 | 取得価格 | 評価額 | 評価損益 | 取得価格 | 評価額 | 評価損益 |
2023/3/1 | 12,000 | 12,000 | 0 | 9,000 | 8,000 | -1,000 |
2023/2/1 | 11,000 | 12,000 | 1,000 | 8,000 | 10,000 | 2,000 |
2023/1/1 | 10,000 | 13,000 | 3,000 | 7,000 | 9,000 | 2,000 |
Apps Scriptのコードは次の通りです。
//集計結果を表示するシートを指定
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var PivotSheet = spreadsheet.getSheetByName(‘シート2’);
//シート1のデータ範囲を指定
var sourceData = PivotSheet.getRange(‘シート1!A1:E7’);
//シート2にテーブルを作成
var pivotTable = PivotSheet.getRange(‘A1’).createPivotTable(sourceData);
//シート1の1列目(A列)の日付を取得し降順に並び替え
var pivotGroup = pivotTable.addRowGroup(1); //日付
pivotGroup.showTotals(false).sortDescending(); //合計なし、降順
//シート1の2列目(B列)の銘柄を取得し昇順に並び替え
pivotGroup = pivotTable.addColumnGroup(2); //銘柄
pivotGroup.showTotals(false).sortAscending(); //合計なし、昇順
//———————————————————————–
//集計する値の項目を設定
//———————————————————————–
//シート1の3列目、4列目、5列目のデータを指定
var pivotValue = pivotTable.addPivotValue(3,preadsheetApp.PivotTableSummarizeFunction.SUM);
pivotValue.setDisplayName(‘取得価格’);
pivotValue = pivotTable.addPivotValue(4,SpreadsheetApp.PivotTableSummarizeFunction.SUM);
pivotValue.setDisplayName(‘評価額’);
pivotValue = pivotTable.addPivotValue(5,SpreadsheetApp.PivotTableSummarizeFunction.SUM);
pivotValue.setDisplayName(‘評価損益’);
アラートや通知機能を追加するマクロ例
アラートをメールで通知するマクロの例を紹介します。
下表はスプレッドシートに作成した進捗管理表です。1行が1つの作業になっています。進捗管理表のB列が「完了」になっていない作業に関して納期当日になった場合、アラートメールを送信する処理です。
A | B | C | D | E | |
1 | 納期 | 状況 | 依頼者 | 依頼タイトル | 依頼内容 |
2 | 2023/9/15 | 完了 | 水戸一郎 | 資料作成 | 資料の作成をお願いします。 |
3 | 2023/9/20 | 完了 | 桜木次郎 | バナー作成 | バナーの作成をお願いします。 |
4 | 2023/9/25 | 作業中 | 流川太郎 | デザイン作成 | デザインの作成をお願いします。 |
5 | 2023/9/30 | 作業中 | 水戸一郎 | 資料作成 | 資料の作成をお願いします。 |
6 | 2023/10/5 | 未着手 | 桜木次郎 | バナー作成 | バナーの作成をお願いします。 |
7 | 2023/10/10 | 未着手 | 流川太郎 | デザイン作成 | デザインの作成をお願いします。 |
Apps Scriptのコードは次の通りです。
function mailAlerts() {
//進捗管理表のシート取得
var bk = SpreadsheetApp.getActiveSpreadsheet();
var sh = bk.getActiveSheet();
//作業を記載している最初の行と最後の行を取得
var begin_row = 2;
var last_row = sh.getLastRow();
//本日の日付を文字列に整形
var today = new Date();
var formatDate = Utilities.formatDate(today, “JST”,”yyyy/MM/dd”);
//全ての作業をチェックするため行数分ループする
for(var i = begin_row; i <= last_row; i++) {
//納期取得(日付整形)
var sell1 = “A”+i;
var value1 = sh.getRange(sell1).getValue();
var value1 = Utilities.formatDate(value1, “JST”,”yyyy/MM/dd”);
//状況取得
var sell2 = “B”+i;
var value2 = sh.getRange(sell2).getValue();
//依頼者取得
var sell3 = “C”+i;
var value3 = sh.getRange(sell3).getValue();
//依頼タイトル取得
var sell5 = “D”+i;
var value5 = sh.getRange(sell5).getValue();
//依頼内容取得
var sell6 = “E”+i;
var value6 = sh.getRange(sell6).getValue();
//納期が今日で完了になっていない作業はメールを送信
if(formatDate == value1 && value2 !== “完了”){
GmailApp.sendEmail(‘test@mail.com’,
‘【納期アラート】本日納期依頼’+ ‘/依頼タイトル:’ + value5,
‘■依頼者:’ + value3 + ‘\n■依頼内容:’+ value6 + ‘\n■状況:’+ value2 + ‘\n■納期:’+ value1);
}
}
}
今日の日付が「2023/9/25」の場合、送信するアラートメールは次のようなフォーマットです。
【納期アラート】本日納期依頼/依頼タイトル:デザイン作成
■依頼者:流川太郎
■依頼内容:デザインの作成をお願いします。
■状況:作業中
■納期:2023/9/25
このマクロを毎日起動させて納期をチェックする場合は、トリガーを設定します。トリガーの設定情報としては、次のような内容が良いでしょう。
項目 | 設定内容 |
実行する関数を選択 | mailAlerts |
実行するデプロイを選択 | Head |
イベントのソースを選択 | 時間主導型 |
時間ベースのトリガーのタイプを選択 | 日付ベースのタイマー |
時刻を選択 | 午前6時~7時 |
エラー通知設定 | 毎日通知を受け取る |
関連記事:マクロで作業を自動化する方法 | Googleスプレッドシートの使い方
マクロ作成・運用のベストプラクティス
Apps Scriptを作成したり運用したりする上での、最善の方法を紹介します。
コード管理とエラー処理のポイント
Apps Scriptでは、十分なコード管理機能がありません。そのためコードを変更した際のコメントや履歴が残らないので、以前の状態に戻すことが困難となります。コード管理をする場合、Google Chromeの拡張機能である「Google Apps Script GitHubアシスタント」を利用するのが良いでしょう。プロジェクト単位でコードの履歴を管理する保管場所を作成することが可能となります。
またエラー処理を実装しておくことも重要な要素です。Apps Scriptではプログラミングミスなどにより、予期しないエラーが発生する場合があります。エラーが発生した場合、強制終了を防ぐためにエラー処理を実装しておくことが大切です。
エラー処理は「例外処理」と呼ばれています。例外処理は「try catch」構文を使用し、エラーが発生した場合の動作を記述する方法です。エラーの情報やメッセージなどを表示するようにしておけば、エラー発生時に原因を追求することができるでしょう。
マクロの共有・協業方法とセキュリティ注意点
Apps Scriptは、初期設定では他ユーザーに非公開となっています。他ユーザーでも閲覧や編集できるようにするためには、共有設定が必要です。共有設定することで、チーム内にて作業することが可能となるため便利になります。
ただし注意しないといけないのがセキュリティ面です。便利になるからといって共有ユーザーを広げると、関係のないメンバーも閲覧や編集ができてしまう状況となります。ユーザーを限定するなど、共有は必要な範囲にするのが良いでしょう。
よくある質問
ここでは、スプレッドシートに関してのよくある質問について紹介します。
スプレッドシートにマクロを入れたいのですが?
スプレッドシートの操作を記録するマクロを入れる場合、次の手順となります。
- 「拡張機能」-「マクロ」-「マクロを記録」を選択します。
- 記録したい操作の直前に「マクロを記録」をクリックしてください。
- マクロダイアログにて「相対参照を使用」を選びます。
- 記録させたい操作を行います。
- 操作が終了した場合、マクロダイアログの「保存」を押して、名前を付けて保存してください。
記録したマクロを実行する場合は、次の手順です。
- 「拡張機能」-「マクロ」にて、保存した名称をクリックします。
- 記録した操作が自動で実行されます。
マクロを編集する場合は、スクリプトエディタで編集します。
- 「拡張機能」-「Apps Script」を選択します。
- スクリプトエディタが開き、記録したマクロのコードが表示されるので、編集することができます。
作成したマクロをスプレッドシートにインポートする場合は、次の手順です。
- 「ツール」-「マクロ」-「インポート」を選択します。
- 「関数を追加」を押します。
- 追加したい関数を選択することで、インポートができます。
スプレッドシートとエクセルのマクロは互換性がありますか?
スプレッドシートとExcelは互換性がありますが、マクロ機能に関しての互換性はありません。それぞれ、マクロを作成するプログラミング言語が異なるためです。
同様のマクロを実行させる場合、それぞれのプログラミング言語でマクロを再作成する必要があります。
スプレッドシートでマクロの作り方は?
スプレッドシートでマクロを作成する場合は、スクリプトエディタを使用します。スクリプトエディタは、「拡張機能」-「Apps Script」を選択することで表示が可能です。
マクロを作成する場合のプログラミング言語は、JavaScriptベースの言語となります。プログラミングする上での環境構築などは不要なため、コードを記述することですぐに作成作業が可能です。
まとめ
今回は、スプレッドシートのマクロについての概要、作成方法などを紹介しました。業務を効率化する上では、マクロの活用は必須と言えるでしょう。単純なスプレッドシートの操作であれば、プログラミングの知識は必要なくマクロを作成することが可能です。
自動でデータを編集したり、集計したりする場合は、スクリプトエディタでマクロを作成することで自動化ができます。また他のGoogleサービスと連携することも可能です。ぜひチャレンジしてみましょう。
Googleスプレッドシートのマクロに関する重要用語
以下にスプレッドシートのマクロに関する重要用語を紹介します。
用語 | 説明 |
スプレッドシート | Googleが提供するサービスの一つで、表計算ができるアプリのことです。 |
マクロ | 単独や複数の動作を一度に実施することができる機能のことです。 |
Google Apps Script(GAS) | Googleの各種サービスを連携したり自動化したりすることができるプラットフォームです。 |
スクリプトエディタ | GASでスクリプトの記述ができる部分です。スクリプトとは、プログラムのことになります。 |
トリガー機能 | イベントが発生した場合や、指定した時間になった場合にマクロを実行する機能です。 |
関数 | プログラミングで独自の処理を実行する命令のことです。 |
Google Apps Script GitHub アシスタント | GASで作成したプログラムのバージョン管理を行うことができるChromeの拡張機能です。 |