業務を効率的に進める上で、マクロは欠かせない存在です。マクロを活用することで、様々な作業を自動化でき、生産性の向上につながります。マクロはExcelの機能だけだと勘違いしている人も多いかもしれませんが、Googleスプレッドシートにもマクロの機能が搭載されています。マクロを使用する際に、ExcelではVBA(Visual Basic for Applications)とスプレッドシートではGAS(Google Apps Script)を選択します。
この記事では、仕事の効率化アップの為のスプレッドシートマクロの使用方法とVBAとGASの違いについて解説していきます。
チャット一括管理アプリ「OneChat」が今なら初月無料!!
OneChatのダウンロードはこちらから
VBAとGoogleスプレッドシートのマクロの違い
VBAとGoogleスプレッドシートのマクロは、それぞれ異なるプラットフォームで使用されるマクロ言語です。マクロ言語とは、繰り返し実行される一連のコマンドや操作を、自動的に実行するために使用されるプログラミング言語の一種です。特定のタスクや作業を効率的に自動化することで、手作業を少なくし効率の向上が図れます。GoogleスプレッドシートではGASを使用します。
VBAとGASの言語の違いと特徴
VBAとGASは、それぞれMicrosoft Office製品とGoogle Workspace製品向けに提供されているマクロ言語です。以下に、それぞれの違いを説明します。
VBA | GAS | |
構文 | Visual Basic言語をベースにした、シンプルで簡潔な構文。初心者にとっても比較的学習しやすい。 | JavaScript言語をベースにしているが、同時の拡張やGoogle Workspace製品との統合により、特有の構文や機能が存在する。 |
エディタ | VBAコードは、Officeアプリケーション内に組み込まれたエディタで作成・編集される。 | Google Workspace製品内のスクリプトエディタで作成・編集される。 |
コードの生成 | マクロの記録中に行った操作は、VBAコードとして自動的に生成される。 | JavaScriptベースのGASコードが自動生成される。 |
マクロ記録機能 | VBAのマクロ記録機能は比較的シンプルで、複雑な条件分岐や繰り返し処理を記録することが難しい場合がある。 | GASのマクロ記録機能は比較的高度で、条件分岐や繰り返し処理なども記録できる。より複雑な処理のサポートが可能。 |
スプレッドシートとExcelのマクロ実行環境
スプレッドシートとExcelのマクロ実行環境について紹介します。マクロ実行環境とは、マクロが動作するため、コンピュータ上の特定のソフトウェアや環境を指します。マクロは一連の操作やコマンドを自動的に実行するプログラムであり、これを実行するためには特定の実行環境が必要です。
VBA | GAS | |
使用プラットフォーム | Microsoft Office製品(Excel、Word、Accessなど)で利用できる。 | Google Workspaceの製品(Google Sheets、Google Docs、Gmailなど)で使用できる。 |
言語 | Visual Basic言語をベースにしており、Microsoft Officeアプリケーションに埋め込まれた形で使用される | JavaScript言語をベースにしており、ブラウザ上で動作する。 |
オフライン使用 | Microsoft Officeのインストールが必要。オフラインで動作する事が一般的。 | クラウド上で動作するため、オンライン接続が必要。ただし、Google Workspace製品にオフラインモードがある場合、オフライン利用が可能。 |
拡張性 | 主にMicrosoft Office製品向けの開発言語であり、その範囲内でしか利用できない。 | Google Workspace全体で利用でき、Google SheetsやGmailなど複数のアプリケーションで利用可能。 |
API連携 | Microsoft Office製品に特有のAPIと連携。 | Google Workspace製品のAPIと緊密に統合し、他のGoogleサービスとの連携が容易。 |
アクセス権管理 | ファイルやシステムのアクセス権限に依存する。ファイルのセキュリティに注意が必要。 | Google Workspaceの権限管理と統合されており、アクセス権の設定に柔軟性がある。 |
VBAとGASの関数・方法の比較
VBAとGASはそれぞれ異なるプラットフォームで動作し、異なる目的に特化しています。以下にVBAとGASの関数や方法について説明します。VBAとGASは、異なるプラットフォームや言語を持ち、それぞれの環境に特有の関数やメソッドを持っています。
VBAの関数・具体例
VBA関数 | 効果 | 具体例 |
MsgBox関数 | メッセージボックスを表示するための関数。 | MsgBox “Hello, World!” |
InputBox関数 | ユーザーに対話的に入力を求めるための関数。 | Dim userInput As StringuserInput = InputBox(“Enter your name:”) |
Range関数 | セルやセル範囲にアクセスするための関数。 | Dim cellValue As VariantcellValue = Range(“A1”).Value |
If…Then…Else ステートメント | 条件分岐を行うためのステートメント。 | If x > 10 Then MsgBox “x is greater than 10″Else MsgBox “x is not greater than 10″End If |
VBAで関数を使う方法
- VBAエディタの開始:VBA関数を作成するためには、対象のアプリケーション(Excel、Word、Accessなど)でVBAエディタを開始します。通常は「Alt + F11」を押すか、開発タブからエディタにアクセスします。
- モジュールの挿入:VBAエディタ内で、関数を作成するための新しいモジュールを挿入します。これは「挿入」メニューから「モジュール」を選択することで行えます。
- 関数の作成:新しいモジュールに、関数を作成します。
- 関数の実行:VBAエディタを開き、モジュールを選択し実行ボタン(通常は再生ボタン、またはF5キー)をクリックします。)
また、VBAで使用できる機能には以下があります。
- 関数の呼び出し:Excel VBAで、組み込みの関数やユーザー定義の関数を呼び出します。
- ユーザー定義関数の呼び出し:ユーザーが独自に定義した関数も呼び出せます。
- ワークシート関数の利用:ワークシート関数も利用可能です。WorksheetFunction オブジェクトを使用します。
GASの関数・具体例
GAS関数 | 効果 | 具体例 |
Logger.log メソッド | ログにメッセージを出力するためのメソッド。 | Logger.log(“Hello, World!”); |
SpreadsheetApp.getActiveSpreadsheet 関数 | アクティブなスプレッドシートにアクセスするための関数。 | var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); |
Utilities.formatDate 関数 | 日付や時刻の書式を設定するための関数。 | var formattedDate = Utilities.formatDate(new Date(), “GMT”, “yyyy-MM-dd HH:mm:ss”); |
if ステートメント | 条件分岐を行うためのステートメント。 | if (x > 10) { Logger.log(“x is greater than 10”);} else { Logger.log(“x is not greater than 10”);} |
GASで関数を使う方法
- スクリプトエディタの起動:GAStを使用するために、Googleスプレッドシートでスクリプトエディタを開きます。
- 新しい関数の作成:スクリプトエディタで、新しい関数を作成します。関数は通常、JavaScriptのような構文を使用します。
- 関数の実行:関数を実行するために、関数名を含む行を選択し、実行ボタンをクリックします。または、Google Apps内のイベントに関連づけてトリガーを作成することもできます。
- 関数の引数の使用:必要に応じて関数に引数を追加できます。
また、GASで使用できる機能は以下があります。
- 関数の呼び出し:Googleスプレッドシート上でGASを使用する場合、組み込みの関数やGASで定義された関数を呼び出せます。
- カスタム関数の作成:GASで新しい関数を作成し、それをGoogleスプレッドシート上で利用できます。
- スプレッドシート関数の活用:GASでは、スプレッドシートのデータやセル範囲を効果的に操作できます。例えば、getRange メソッドを使ってセル範囲を指定し、そのデータを処理します。
Googleスプレッドシートマクロの基本操作
Googleスプレッドシートでマクロを使用するためには、Googleアカウントにログインし、スプレッドシートを作成する必要があります。
ここでは、スプレッドシート上でマクロの設定を行います。詳しく見ていきましょう。
Scriptsエディタでのマクロ作成
業務で繰り返し行う操作や処理などを自動化できるのがマクロです。マクロでは、自動でウィンドウを表示したり、ボタンで処理を実行させたりすることが可能です。
様々な動作を自動で行うことができ、データを自動で編集したり、送信したりすることもできます。Scriptsエディタを使って作成したマクロは、スプレッドシートやドキュメントなどのGoogle Workspace製品に統合されるため、特定のアプリケーション(WordやPowerPointなど)に合わせて、カスタマイズした機能を追加できます。ScriptsエディタとはGASを編集、実行、デバック(バグの発見、修正)するためのツールです。
また、スクリプトにメールを受信したとき、在庫数が一定以下になったとき、などとトリガーを設定することで、特定のイベントが発生したときにマクロが自動的に実行されるようになります。これにより、データの変更をリアルタイムで実行できます。
マクロをシートに追加する手順
GASエディタを使用して、Googleスプレッドシート上でマクロを作成する手順を説明します。
- スクリプトエディタを開く:スプレッドシートを開き「拡張機能」 → 「マクロ」→「マクロを記録」を選択します。
- セル参照の選択:画面下部で、マクロで使用するセル参照のタイプを絶対参照か相対参照から選びます。
- スクリプトを記述:タスクを入力し保存をクリックします。
- マクロを保存:マクロに名前をつけてカスタムショートカットを作成し、保存します。
- マクロを実行:マクロを実行するには、「拡張機能」→「マクロ」→目的のマクロを選択します。
Googleスプレッドシートでマクロを作成すると、Apps Script が作成されます。作成された Apps Script を編集するには、上部の「ツール」→「スクリプト エディタ」 をクリックします。
Google Apps Scriptの有効活用
GASを利用して、業務の効率化につながる方法を紹介します。
- 作業の自動化
- 複数のGASの連携
- Webサイトからの情報収集
- APIを利用した外部ツールとの連携
- 業務の効率化に役立つ独自ツールの開発
それぞれについて、詳しく解説します。
作業の自動化
GASを活用することで、Googleが提供しているサービスの処理を自動化できます。例えば表やグラフ、フォーマットの整理などの作業を、手動から自動化することが可能です。また、一定のプロセスが決まっていて工程数が多い作業の場合、ボタンをクリックするだけで一連の作業が自動化できるように設定することもできます。
フォーマットの整理を行う場合は以下のように設定します。
function formatCells() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var range = sheet.getRange(“A1:B10”); // 例: 数値の表示形式を変更 range.setNumberFormat(“#,##0.00”); // 他にも様々な書式設定が可能} |
複数のGoogleサービスの連携
Googleサービスをそれぞれ単一で自動化するだけでも効率化できますが、Googleサービス動詞を連携させることで、効率化が望めます。
GoogleスプレッドシートとGmailを組み合わせたり、GoogleカレンダーとGoogleドキュメントを組み合わせたりすることが可能です。
例えば添付ファイルがあるメールが届いたら、自動でファイルをアップロードさせる設定にしたり、設定した日時に一斉にメールを送ったりすることも可能です。
添付ファイルがあるメールが届いた際に添付ファイルをGoogleドライブに自動で保存する方法を示します。
- Googleドライブ上で新しいGASプロジェクトを作成します。
- スクリプトエディタで以下のスクリプトを貼り付けます。
function processAttachments() { // Gmailの現在のスレッドを取得 var thread = GmailApp.getCurrentMessageThread(); // スレッド内のメッセージを取得 var messages = thread.getMessages(); // 各メッセージの添付ファイルを処理 for (var i = 0; i < messages.length; i++) { var attachments = messages[i].getAttachments(); // ファイルをGoogle Driveにアップロード for (var j = 0; j < attachments.length; j++) { var file = DriveApp.createFile(attachments[j]); Logger.log(“Uploaded file: ” + file.getName()); } }} |
- スクリプトエディタで「トリガー」メニューを開き、「トリガーを追加」を選択します。
- processAttachments 関数を実行するトリガーを作成します。トリガーのイベントは「メールの受信時」など、適切なものを選択します。
- トリガーを有効にして保存します。
このスクリプトは、現在のスレッド内のメッセージを取得し、各メッセージの添付ファイルをGoogleドライブにアップロードします。アップロードしたファイルの名前はログに表示されます。
このように「この作業をやった後に次の作業をする」というプログラムの作成が可能で、Googleサービスをまたがった作業の自動化が行えます。
Webサイトからの情報収集
Webサイトから特定種類の情報を集めることを、スクレイピングと言います。Googleスプレッドシートの関数とGASを組み合わせると、スクレイピングが簡単に実行できます。
スクレイピングが出来るツールは他にもありますが、PCの電源を常時オンにしておく必要があったり、サーバーのレンタルが必要だったりと、手間がかかるケースが多くあります。その点実行環境がWeb上にあるGASは、インターネット環境があれば利用できることがメリットです。
APIを利用した外部ツールとの連携
GASは、Googleが提供しているサービスと連携できるだけでなく、LINEやChatworkなどの外部ツールと連携し、活用の幅を広げることが可能です。例えば、GoogleカレンダーとChatworkを連携すると、Googleカレンダーで事前に共有していた内容を、設定した時間に再度Chatworkでリマインドするプログラムを組むことができます。
以下に方法を説明します。
- Googleドライブで新しいGASプロジェクトを作成します。
- スクリプトエディタで以下のスクリプトを貼り付けます。
// Googleカレンダーから予定を取得し、Chatworkにメッセージを送信するスクリプト function sendCalendarReminders() { // Chatwork APIのトークンとルームID var chatworkToken = ‘YOUR_CHATWORK_API_TOKEN’; var roomId = ‘YOUR_CHATWORK_ROOM_ID’; // 現在の日時を取得 var now = new Date(); // 1時間後までの予定を取得 var events = CalendarApp.getDefaultCalendar().getEvents(now, new Date(now.getTime() + 60 * 60 * 1000)); // Chatworkにメッセージを送信 for (var i = 0; i < events.length; i++) { var event = events[i]; var message = ‘リマインダー: ‘ + event.getTitle() + ‘ – ‘ + event.getStartTime(); sendChatworkMessage(chatworkToken, roomId, message); }} // Chatworkにメッセージを送信する関数 function sendChatworkMessage(apiToken, roomId, message) { var apiUrl = ‘https://api.chatwork.com/v2/rooms/’ + roomId + ‘/messages’; var options = { ‘method’: ‘post’, ‘headers’: { ‘X-ChatWorkToken’: apiToken }, ‘payload’: { ‘body’: message } }; // Chatwork APIにPOSTリクエストを送信 var response = UrlFetchApp.fetch(apiUrl, options); Logger.log(‘Chatwork API Response: ‘ + response.getContentText());} |
- スクリプトエディタで「トリガー」メニューを開き、「トリガーを追加」を選択します。
- sendCalendarReminders 関数を実行するトリガーを作成します。トリガーのイベントは「時間主導型」を選択し、実行する日時を指定します。
- トリガーを有効にして保存します。
このように外部ツールと組み合わせることは、GASを活用した業務の効率化には欠かせないプログラムとなるでしょう。
業務の効率化に役立つ独自ツールの開発
GASでは作成した自動化ツールや情報収集ツールを、Webサイト上に公開することができます。作成したツールはブラウザで実行できるプログラムなので、レンタルサーバを契約したり、Webサーバを管理したりする必要がありません。初期投資なしで業務の効率化に役立つ独自ツールの開発が行えます。
VBAからGoogleスプレッドシートへの移行
VBAのコード、はそのままGoogleスプレッドシートで使用することは出来ません。Googleスプレッドシートのマクロで使用されているGASを使って、コードを作成する必要があります。ここからは、VBAコードのGASへの変換方法を説明します。
VBAコードのGASへの変換方法
Microsoft Excelのマクロを、Googleスプレッドシートに変換することができます。それには、GASを使用してマクロを作成し直します。マクロの作成にExcelではVBAが使用されるように、Google スプレッドシートでは Apps Script が使用されます。
- Googleスプレッドシートの作成:Googleアカウントにアクセスし、新しいスプレッドシートを作成します。
- スクリプトエディタを開く:作成したスプレッドシートを開き、「拡張機能」 → 「Apps Script」を選択して、Google Apps Scriptのエディタを開きます。
- VBAコードをGASに変換:VBAで書かれたコードをGASに変換します。言語が異なるため、一部の構文やメソッドは修正が必要です。例えば、Excel VBAの ActiveCell.Value は、GASでは getActiveSheet().getActiveCell().getValue() となります。
- コードの追加とテスト:GASエディタに変換したコードを貼り付けます。適切に動作するかどうかをテストします。エディタ上で「実行」ボタンをクリックしてテスト実行することができます。
- 必要な権限の許可:スクリプトを実行する際に必要な権限を許可します。例えば、スプレッドシートへのアクセス許可など。
- トリガーの設定(オプション):必要に応じて、スクリプトを定期的に実行するトリガーを設定します。エディタ左側の時計アイコンからトリガーの設定が可能です。
- VBAからの関数や処理の対応:VBAで使用していた関数や処理に相当するGASのメソッドや関数を調査し、適切に置き換えます。
- 移行の完了とVBAの削除:GASでのスクリプトが期待通りに動作することを確認したら、元のExcelファイルからVBAのコードを削除します。
このプロセスにより、VBAで書かれたコードをGoogleスプレッドシート上で実行可能なGASに変換し、移行を行うことができます。ただし、言語の違いや特定の機能の違いにより、一部のコードは手動で調整が必要となるかもしれません。
移植の際の落とし穴と対策
VBAからGASにコードを移植する際には、いくつかの落とし穴や注意点があります。以下に、移植の際に起こりうる問題とそれに対処する対策をいくつか挙げてみました。
- 言語の違い
- オブジェクトモデルの違い
- 権限の取得
- 外部リソースへのアクセス
- トリガーの設定
- ライブラリの違い
- デバッグの手段
- コードの最適化
言語の違い
VBAとGASは異なるプログラミング言語であるため、一部の構文やメソッドが異なり手動でコードを変換する必要があります。APIドキュメントやサンプルコードを参照して、GASで対応する方法を見つけましょう。
出典:newfield-inc.com「gas関数一覧!GASでどんなことができるか確認しよう」
オブジェクトモデルの違い
ExcelのオブジェクトモデルとGoogleスプレッドシートのオブジェクトモデルは、類似していますが一部異なる部分があります。セルの範囲の指定やシートの取得方法などが、異なることがあります。コードをGASに変換する際には、オブジェクトモデルの違いに注意して調整が必要です。
権限の取得
GASがGoogleスプレッドシートにアクセスするためには、権限の許可が必要です。必要な権限を取得できるよう、スクリプト実行時にユーザーに許可を求めるようにします。
外部リソースへのアクセス
VBAで使用している外部のAPIやデータベースにアクセスする部分がある場合、GASからも同様のアクセスが可能であるか確認しましょう。必要に応じてGASのUrlFetchAppなどのサービスを使用してデータを取得する方法を調査します。
UrlFetchAppとは、外部のウェブサイトやウェブAPIと通信するための機能を提供するクラスです。これを使用することで、スクリプトがHTTPリクエストを送信して、外部のサーバーからデータを取得したり、データを送信したりすることが可能です。
主な用途としては、外部APIとのデータのやりとりや、ウェブサイトのスクレイピング、オンラインサービスとの連携などがあります。
トリガーの設定
Excel VBAで使用していたタイマーイベントや特定のイベントに基づくトリガーは、GASでは異なる形で実現される場合があります。必要に応じてトリガーを再設定します。
ライブラリの違い
VBAで使用していたライブラリがGASには存在しない場合、代替のライブラリや手段を見つける必要があります。以下に代替ライブラリや手段を見つける方法を説明します。
GAS ネイティブの機能を利用する | GASは独自の機能やメソッドを提供しています。まず、GASが提供するネイティブな機能やメソッドを確認し、ライブラリの代替として活用できるかを検討してみてください。 |
外部の API を利用する | GASでは、外部のAPIを使用してデータを取得・操作することができます。GASが直接サポートしていない機能やデータにアクセスするためのAPIが提供されている場合、それを利用して必要な処理を実現することができます。 |
JavaScript ライブラリの活用 | GASはJavaScriptを基にしており、JavaScriptの一部の機能やライブラリはGASでも利用可能です。もしVBAで利用していた機能がJavaScriptで実装されている場合、それをGASでも利用できるか調査してみましょう。 |
自作の関数や処理の実装 | VBAで使用していた機能が比較的単純であれば、それをGAS用に再実装することも検討できます。必要に応じてGAS向けの関数や処理を作成し、VBAの機能を代替することができます。 |
GAS ユーザーコミュニティの利用 | GASに関するユーザーコミュニティやフォーラムを利用して、他の開発者と相談することも一つの手段です。GASユーザーコミュニティは、新たなアイディアやライブラリの提案を受け付けていることがあります。 |
外部ライブラリの連携 | 外部のサービスやライブラリを使って連携することも考えられます。たとえば、GASでウェブ API を呼び出すことができます。 |
新しいライブラリや機能を見つけるには、GASの公式ドキュメント、Google Developersのサイト、関連するコミュニティやフォーラムを探索することが役立ちます。
デバッグの手段
GASはVBAとは異なるデバッグツールを提供しています。Loggerやconsole.logなどを活用してデバッグを行いましょう。
Loggerやconsole.logは、プログラムやスクリプトのデバッグ(バグの発見と修正)やログの記録に使用されるメッセージ出力の手段です。これらは主に開発者がコード内で何が起こっているかを理解し、問題を特定するのに役立ちます。
コードの最適化
VBAで動作していたコードがGASでは遅くなる可能性があります。効率的なコードの書き方やGASの最適化手法を学び、必要に応じてコードを最適化します。
移植作業では、十分なテストとデバッグが必要です。段階的に移植を進め、小さな部分からテストしていくことで、問題の特定や修正がしやすくなります。
VBAとスプレッドシートの併用事例
VBAとスプレッドシートを併用する事例は多岐にわたります。業務効率化に有効なVBAとGASの併用事例をあげてみます。
- データの同期と連携
- Googleスプレッドシートののデータ処理をExcelの可視化
- Googleフォームとの連携
- Googleスプレッドシート上のデータをVBAで処理
- GoogleカレンダーやGoogleドライブとの連携
- Googleスプレッドシート上での処理とVBAでの通知
データの同期と連携
GoogleスプレッドシートとVBAを使用して、データの同期や連携を行います。例えば、Excel上でのデータをGoogleスプレッドシートに自動的にアップロードしたり、逆にGoogleスプレッドシートのデータをExcelに取り込んだりすることができます。
Googleスプレッドシートのデータ処理とExcelの可視化
GASでスプレッドシートのデータ処理を行い、その結果をExcelに取り込んで可視化するケースがあります。Googleスプレッドシートでデータを前処理し、VBAで作成したExcelダッシュボードやグラフに結果を反映させます。
Googleフォームとの連携
Googleフォームで収集されたデータをGoogleスプレッドシートに保存し、VBAを使用してそのデータを取得、処理することが出来ます。収集したデータをExcelで分析するために取り込むなどの用途が考えられます。
Googleスプレッドシート上のデータをVBAで処理
GASを使用してGoogleスプレッドシート上でデータを加工し、VBAを使用してその結果をExcelに取り込むケースがあります。例えば、GASで特定の条件を満たす行を抽出し、それをExcelで利用するなどです。
GoogleカレンダーやGoogleドライブとの連携
GASを使用してGoogleカレンダーやGoogleドライブのデータを取得し、VBAでExcelに統合することが出来ます。例えば、Googleカレンダーから予定を取得してExcelのカレンダーに表示するなどです。
Googleスプレッドシート上での処理とVBAでの通知
Googleスプレッドシート上で定期的なデータ処理を行い、VBAを使用して結果をメールやメッセージで通知するケースがあります。GASが処理を行い、その結果をVBAで通知する流れです。
これらの事例では、VBAとGoogleスプレッドシートを組み合わせることで、データの柔軟な処理や異なるサービスとの連携を実現しています。
スプレッドシートマクロの実践例
スプレッドシートマクロの実践例を見ていきます。GASを使用し、Googleスプレッドシート上で動作するマクロを説明します。
データ管理と自動化の応用例
ここではデータの管理と自動化の応用例をいくつか説明します。
- データの自動整形とクリーニング
- データの自動化とグラフ化
- データの自動フィルタリング
- メール通知の自動化
データの自動整形とクリーニング
直近のデータを取得し、不要な列や行を削除して整形します。例えば、毎日収集されるデータを整形し、特定のフォーマットに合わせることができます。
function formatAndCollectData() { // スプレッドシートのシートを指定 var rawDataSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(‘収集データ’); var formattedDataSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(‘整形データ’); // データ範囲を取得 var lastRow = rawDataSheet.getLastRow(); var lastCol = rawDataSheet.getLastColumn(); var dataRange = rawDataSheet.getRange(2, 1, lastRow – 1, lastCol); // ヘッダーを除く // 収集されたデータを取得 var rawData = dataRange.getValues(); // データ整形および特定のフォーマットに合わせる処理 var formattedData = []; for (var i = 0; i < rawData.length; i++) { var originalData = rawData[i]; // ここで必要な整形処理を実施 var formattedRow = [ originalData[0], // 列1のデータ originalData[1], // 列2のデータ // 必要な列が続く… ]; formattedData.push(formattedRow); } // 整形したデータを新しいシートに書き込む writeFormattedDataToSheet(formattedData, formattedDataSheet);} // 整形したデータを新しいシートに書き込む関数function writeFormattedDataToSheet(formattedData, targetSheet) { // 新しいシートをクリア targetSheet.clear(); // 整形データを新しいシートに書き込む for (var i = 0; i < formattedData.length; i++) { targetSheet.appendRow(formattedData[i]); }} |
データの自動化とグラフ化
特定の範囲のデータを自動的に集計し、グラフを生成するマクロです。例えば、月ごとの売上データを取得して、月ごとの合計を計算し、それを折れ線グラフで表示することができます。
function createMonthlySalesLineChart() { // スプレッドシートのシートを指定 var salesDataSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(‘売上データ’); // 売上データを取得 var lastRow = salesDataSheet.getLastRow(); var dataRange = salesDataSheet.getRange(2, 1, lastRow – 1, 2); // ヘッダーを除く、日付と売上金額の2列 // 売上データを2次元の配列として取得 var rawData = dataRange.getValues(); // 月ごとの合計を計算 var monthlyTotals = calculateMonthlyTotals(rawData); // グラフの描画 drawLineChart(monthlyTotals);} // 月ごとの合計を計算する関数 function calculateMonthlyTotals(rawData) { var monthlyTotals = {}; for (var i = 0; i < rawData.length; i++) { var date = new Date(rawData[i][0]); var monthKey = Utilities.formatDate(date, ‘GMT’, ‘yyyy-MM’); if (!monthlyTotals[monthKey]) { monthlyTotals[monthKey] = 0; } monthlyTotals[monthKey] += parseFloat(rawData[i][1]); } return monthlyTotals;} // 折れ線グラフを描画する関数 function drawLineChart(monthlyTotals) { // 新しいシートを作成 var chartSheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet(‘折れ線グラフ’); // ヘッダー行を追加 chartSheet.appendRow([‘月’, ‘合計売上’]); // データを新しいシートに書き込む for (var monthKey in monthlyTotals) { chartSheet.appendRow([monthKey, monthlyTotals[monthKey]]); } // グラフを挿入 var chart = chartSheet.newChart().asLineChart() .addRange(chartSheet.getRange(1, 1, chartSheet.getLastRow(), 2)) .setPosition(1, 3, 0, 0) .build(); chartSheet.insertChart(chart);} |
データの自動フィルタリング
特定の条件に基づいて、データを自動的にフィルタリングするマクロです。例えば、商品カテゴリが特定の値の行だけを表示するといった処理ができます。
function extractProduct() { // スプレッドシートのシートを指定 var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(‘在庫管理’); // 商品名が一致するキーワードを指定 var keyword = ‘特定の商品’; // 例: ‘りんご’ // 商品を抽出するための配列 var extractedProducts = []; // データ範囲を指定 var dataRange = sheet.getRange(2, 1, sheet.getLastRow() – 1, sheet.getLastColumn()); var values = dataRange.getValues(); // 商品名がキーワードに一致する行を抽出 for (var i = 0; i < values.length; i++) { var itemName = values[i][0]; // 商品名の列(仮定) // 商品名がキーワードに一致する場合は抽出配列に追加 if (itemName.toLowerCase().indexOf(keyword.toLowerCase()) !== -1) { extractedProducts.push(values[i]); } } // 抽出した商品を新しいシートに書き込む(任意) writeExtractedProductsToNewSheet(extractedProducts);} // 抽出した商品を新しいシートに書き込む関数function writeExtractedProductsToNewSheet(extractedProducts) { // 新しいシートを作成 var newSheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet(‘抽出結果’); // ヘッダー行を追加 newSheet.appendRow([‘商品名’, ‘在庫数’, ‘価格’]); // 仮定に基づく列名 // 抽出した商品を新しいシートに書き込む for (var i = 0; i < extractedProducts.length; i++) { newSheet.appendRow(extractedProducts[i]); } |
メール通知の自動化
特定の条件が満たされたときに、特定のユーザーにメール通知します。例えば、在庫が一定数以下になったときに担当者にメールで通知する処理ができます。
// Google Apps Scriptで使用する関数 function checkInventory() { // スプレッドシートのシートを指定 var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(‘在庫管理’); // 在庫が一定数以下の商品を検索 var dataRange = sheet.getRange(2, 1, sheet.getLastRow() – 1, sheet.getLastColumn()); var values = dataRange.getValues(); var threshold = 10; // 在庫のしきい値 for (var i = 0; i < values.length; i++) { var itemName = values[i][0]; // 商品名の列(仮定) var currentStock = values[i][1]; // 在庫数の列(仮定) // 在庫がしきい値以下の場合はメールで通知 if (currentStock < threshold) { sendNotification(itemName, currentStock); } }} // メールで通知する関数 function sendNotification(itemName, currentStock) { var recipientEmail = ‘担当者のメールアドレス’; // 担当者のメールアドレスを指定 // メールの本文 var subject = ‘在庫通知: ‘ + itemName; var body = ‘商品名: ‘ + itemName + ‘\n現在の在庫数: ‘ + currentStock; // メール送信 MailApp.sendEmail({ to: recipientEmail, subject: subject, body: body });} |
GASを使ったメール送信とGmail連携
GASを使ったメール送信とGmail連携について説明します。GASを用いてメール送信の設定をプログラムしておくことで、メール送信の自動化が可能になります。
基本的なメールの送信 | 基本的なテキストメールを送信できます。送信先、件名、本文を指定することができます。 |
HTMLメールの送信 | 本文にHTMLコードを含めることで、HTMLメールを送信できます。 |
添付ファイルの送信 | オプションとしてパラメータを指定して添付ファイルを送信できます。 |
インライン画像の送信 | HTMLメール内でインライン画像を埋め込み、それを送信することができます。 |
特定ラベルへのメール送信 | パラメータを指定して、送信したメールに特定のラベルを付けることができます。 |
メールの予約送信 | パラメータを指定して、メールを指定した日時に予約送信が可能です。 |
企業での効率化事例とおすすめツール
企業でGASを使った効率化の事例と、業務効率化のおすすめのツールを紹介します。
効率化事例 | 内容 | おすすめツール |
自動レポート作成 | スプレッドシート上のデータを取得し、定期的にレポートを生成して関係者にメールで送信する。 | Google Analytics API、Gmail(GAS内のメール送信用API) |
データ整形 | スプレッドシート内のデータを自動的に整形し、特定の条件に基づいて色分けやグラフの更新を行う。 | Google Sheets API、スプレッドシート(GAS内のスプレッドシート処理用API) |
フォーム統合 | Google フォームから収集されたデータをスプレッドシートに格納し、自動的に処理・分析を行う。 | Google Forms、スプレッドシート |
メールの自動化とリマインダー | 特定のイベントが発生したときにメール通知を送り、タスクの期限切れをリマインドする。 | Gmail、トリガー機能(スクリプトを定期的に実行する) |
カレンダーとの連携 | Googleカレンダーに新しい予定が追加されたときに、関連するスプレッドシートにデータを記録する。 | Googleカレンダー、スプレッドシート |
よくある質問
ここまで、Googleスプレッドシートマクロについて、VBAとGASの違いについて解説し、ビジネスの効率化アップにつながる利用方法を紹介しました。ここからは、スプレッドシートマクロに関するよくある質問を紹介します。
スプレッドシートでマクロは使えますか?
スプレッドシートでマクロは使えます。スプレッドシート上でマクロを記録、実行する機能が標準で提供されています。この機能を使用すると、簡単なタスクや一連のアクションを記録し、後で再生できます。スプレッドシートでは、この機能は「マクロ記録機能」と呼ばれています。記録した操作を再現するだけでなく、マクロを手動で編集して複雑なタスクを実行することも可能です。なお、このマクロ記録機能は比較的単純なタスクに向いており、より高度な自動化が必要な場合はGAS(JavaScriptベースのスクリプト言語)を使用することが推奨されます。
スプレッドシートとVBAは互換性がありますか?
スプレッドシートとVBAは、基本的な概念や目的は似ていますが、直接的な互換性はありません。それぞれ異なるプラットフォームであり、スクリプトやマクロの言語も異なります。スプレッドシートはGoogle Sheets上で動作し、クラウドベースのウェブアプリケーションです。VBAはMicrosoft Office製品(Excel、Word、Accessなど)で使用されるマクロ言語で、デスクトップアプリケーション上で実行されます。
しかし、VBAスクリプトをGASに変換することは可能です。手動でコードを書き換える必要がありますが、類似の操作や概念があるため、移行は行えます。移行作業には手間がかかる場合がありますが、GASが提供する柔軟性とクラウドベースの利点を活かすことができます。
スプレッドシートでマクロを作成する言語は?
スプレッドシートでは、Google Apps Script(JavaScriptベース)が使用されます。GASを使用することで、スプレッドシート上でさまざまな自動化タスクやカスタム機能を作成できます。具体的な例として、特定の条件でセルを自動的にフォーマットする、外部APIからデータを取得してスプレッドシートに反映する、フォームの送信時に自動的に処理を行うなどが挙げられます。
スクリプトエディタを使ってGASを記述し、それをスプレッドシートに関連付けて実行することができます。スクリプトエディタはスプレッドシート内の「拡張機能」メニューからアクセスできます。 GASはJavaScriptの機能や構文を基にしており、初心者から上級者まで幅広いユーザーが利用できます。
まとめ
スプレッドシートマクロを使用することで、業務上のさまざまなタスクを自動化し、教務の効率化を図ることが可能です。VBAとGASは、それぞれMicrosoft Office製品とGoogle Workspace製品向けのスクリプト言語であり、いくつかの違いがありました。プラットフォームや使用する言語の違い、異なる実行環境や外部サービスとの連携など、それぞれの特徴を生かして活用することで、単純作業の自動化に終わらない、多くのメリットを受けることができます。
スプレッドシートマクロVBAに関する重要用語
用語 | 意味 |
VBA | Visual Basic for Applications。Microsoft Officeスイート(Excel、Word、Accessなど)に統合されたプログラミング言語。マクロやスクリプトを記述してOfficeアプリケーションの自動化やカスタマイズが可能。 |
GAS | Google Apps Script。Googleスプレッドシートやその他のGoogle Workspaceアプリケーションを拡張するためのスクリプト言語。JavaScriptをベースとしており、G Suite製品とのシームレスな統合が可能。 |
マクロ | プログラム内に記述された一連のコマンドや操作手順を、単一のコマンドや操作で実行できるようにするための仕組みや手法。主に繰り返し行われる標準的なタスクを自動化する目的で使用する。 |
オブジェクトモデル | プログラミングにおいて、特定のソフトウェアやアプリケーションの構造や機能を表現するための階層的なオブジェクトの集合や体系を指す。オブジェクトモデルは、プログラム内で使用される異なる要素やオブジェクトが相互にどのように関連しているかを示す。 |
関数 | 特定の処理を行い、結果を返すための再利用可能なコードブロック。Excelの関数とは異なり、VBA関数は自分で定義できる |
イベント駆動型プログラミング | VBAでは、ユーザーの操作や特定のイベント(ボタンクリック、セルの変更など)が発生した際に、それに対応する処理を実行するプログラミングスタイル。 |
トリガー | GASスクリプトを自動的に実行する仕組み。タイムトリガーは定期的に実行されるスケジュールトリガーであり、イベントトリガーは特定のイベント(セルの変更など)が発生した時に実行される。 |
マクロの記録機能 | ユーザーが行った操作を記録し、再生可能なマクロとして提供すること。 |