日頃発生する“面倒くさい業務”。簡単なプログラミングで効率化できる可能性がある。本連載では、業務を効率化する手段としてVBAとGASの使い方を説明し、よくある業務課題の解決策を紹介する。
業務で発生するちょっとした面倒くさい業務。特定の操作を繰り返すだけなので、今のままでもいいけど、楽になったらいいなと思うこともあるのではないでしょうか。例えば業務を自動化すると時間が空くため、他の業務に時間を充てたり、残業時間を減らしたりできるかもしれません。
本連載「働く価値を上げる“VBA/GAS術”」では、業務を効率化する手段として「Microsoft Excel」(マイクロソフトエクセル)で使える「VBA」(Visual Basic for Applications)と「G Suite」の「GAS」(Google Apps Script)の使い方を説明し、よくある業務課題の解決策を紹介します。
これまで14回にわたり、オフィスワークで活用できる幾つかのツールとその作り方を紹介しながら、VBAとGASについて解説してきました。最終回の今回は、そのまとめとして、これまでの連載を振り返りながら、VBAとGASについて、おさらいしていきます。
連載第1、2回では「Excel VBA」と「Google Apps Script」の概要と、その特徴について、またその開発環境についてお伝えしました。
「VBA」はMicrosoft ExcelをはじめとしたMicrosoft Officeのソフトウェアを操作することに長けたプログラミング言語です。一方で、「Google Apps Script(GAS)」は、GoogleスプレッドシートをはじめとしたG Suiteアプリケーションを操作するのが得意なプログラミング言語です。
これら2つのプログラミング言語には下記の共通点があり、いずれもプログラミング職ではないオフィスワーカーが最初に学ぶプログラミング言語として適しています。
一方で、相違点もあります。前述の通り、操作対象の中心となるアプリケーションが異なります。また、プログラミング言語自体も異なり、VBAであればVisual Basicが、GASであればJavaScriptがベースになっています。それぞれのプログラミング言語が使われている環境に近い職業にいる方には学習コストが低くなります。
もう一つの大きな相違点は、VBAはローカルPCで、GASはGoogleのクラウド上で動作することです。この点は、開発の進め方や実現できることに大きく関係します。
例えば、GASはクラウド上で開発、動作するので、共同開発が行いやすい、時限式のイベントトリガーにより、時間に応じてスクリプトを実行させることなどが可能です。しかし、Googleのクラウドを使うため、実行時間や実行の回数など、細やかな制約が設けられており、その範囲内に収まるように開発する必要があります。VBAはローカルPCで動作するので、そのような制約はありませんが、共同開発のしやすさではGASに優位点があります。
「どちらを選択するか」ということであれば職場のオフィススイートに依存することが多いでしょう。Microsoft Officeが中心であればVBAを、G Suiteを中心に使用しているのであれば、Google Apps Scriptを使用するのが自然の流れです。ただ、昨今では両方のオフィススイートを両方とも導入する企業も増えてきており、適材適所でハイブリッドに活用するチームも増えてきています。
連載第3、4回では、「シート上のデータのチェック」を題材に、VBAとGASで簡単なツールの作り方を解説しました。セルに入力されているデータのデータ型の揺らぎは、関数、ピボットテーブル、グラフ、そしてプログラミングなど、コンピュータの力を存分に借りながら業務を進める上で、障害になりやすいものです。それは、ExcelでもGoogleスプレッドシートでも同様です。
このツールのプログラムは、VBAもGASもともに、変数の宣言、セルの値の参照、条件分岐、反復といった基本要素が含まれており、最初にトライするツールとして適しています。以下の表に、VBAとGASのこれらの構文の比較をまとめているので、参考にしてください。
項目 | VBA | GAS |
---|---|---|
変数の宣言 | Dim 変数名 As 型 | var 変数名 |
セルの値を参照 | Rangeオブジェクト.Value | Rangeオブジェクト.getValue() |
条件分岐 | If 条件式 Then 処理 | if(条件式){ //trueの場合に行う処理 } |
反復 | For 変数 = 初期値 To 最終値 '処理 Next 変数 |
for (初期化式; 条件式; 増減式) { //処理 } |
連載第5、6回では「データ一覧から書類を作成する」ツールをVBAとGASで作成しました。書類を作成するルーティン業務は、多くの職場で発生しています。VBAやGASを学ぼうと決める契機に、このツールの作成を目標にされている方も多いでしょう。
これらのツールを作成するポイントが2つあります。
1つ目のポイントは、ひな型用のブック(またはスプレッドシート)を事前に用意しておくことです。プログラムとしては、ひな型をコピーしながら取引先ごとの書類を作成する流れとしています。というのも、プログラムは見栄えを良くしたり、体裁を整えたりするのは苦手だからです。先に、人の目と手でそれを作成しておく方が見栄えの良い書類を作れます。
2つ目のポイントは、Excelまたはスプレッドシートのオブジェクトの階層構造を把握することです。セルの操作だけではなく、シートや、ブックまたはスプレッドシートの操作が必要になるので、それぞれのオブジェクトとその関係性を理解する必要があります。VBAでもGASでも、以下の表に示す階層を形作っており、上位から下位のオブジェクトを取得して操作する流れが基本です。
オブジェクト | VBA | GAS |
---|---|---|
アプリケーション | Applicationオブジェクト | SpreadsheetAppオブジェクト |
ブック、スプレッドシート | Workbookオブジェクト | Spreadsheetオブジェクト |
シート | Worksheetオブジェクト | Sheetオブジェクト |
セル | Rangeオブジェクト | Rangeオブジェクト |
連載第7、8回では、「書類からデータを収集する」ツールを作成しました。
これらのツールを作成するためには、「フォルダの中のファイルを操作する」という操作が必要になります。VBAでは、PCの任意のフォルダに存在する個々のファイルを開くという処理を、「FileSystemObject」を使って実現することができます。ライブラリ「Microsoft Scripting Runtime」の参照設定が必要になりますが、フォルダやファイルをオブジェクトとして容易に操作できるようになるのでお勧めです。
一方で、GASであれば、Googleドライブを操作できる「Driveサービス」を使って、ドライブ上のフォルダやファイルを操作できます。
このように、ExcelとFileSystemObjectを、またはGoogleスプレッドシートとGoogleドライブを連携させることで、実現できることがぐっと広がります。
連載第9、10回は、それぞれ第7、8回のツールをベースに、より処理を高速に、かつメンテナンス性を高めるテクニックを紹介しました。
プログラムは目的の動作をすれば、それがベストかというとそうではありません。ツールを運用する上で不具合が起きにくかったり、業務や状況の変化に対応しやすかったりするための工夫はたくさん考えられますし、当然実行時間は短いに越したことはありません。
その工夫の一部として、VBAではテーブル、列挙型を使うテクニックを紹介しました。テーブルを使うことで、表をまとまりとして操作しやすくなり、そのサイズ変更にも強くなります。列挙型を使って列番号をグループ管理することで、可読性とメンテナンス性を上げることができます。
また高速化のテクニックでは、VBA、GASともに「配列」を紹介しました。ExcelもGoogleスプレッドシートも、それらのアプリケーションへのアクセスの回数は少なければ少ないほど処理速度が向上します。ですから、実行速度の観点では、データをまとめて配列に取り込み、配列の中で処理を行うことが望ましいのです。特に、GASでは実行時間の制限がシビアなので、配列を駆使する技術は必須といってもよいでしょう。
連載第11、12回では、「メール」をテーマに日報メールの下書きを作成するツールを紹介しました。表計算だけではなく、メールもルーティンとして多くの業務時間を費やしていることが少なくありません。しかし、VBAやGASはメール関連の業務の自動化にも活用をすることができます。
VBAによるメールの下書きの作成は、Microsoft Outlookの操作により実現できます。「Outlookライブラリ」の参照設定が必要ですが、それによりExcelとOutlookを連携させたさまざまなツールを開発できるようになります。OutlookライブラリのMailItemオブジェクトとそのメンバーを使用することで、簡単にメールの作成、送信先や件名の設定などを実現できます。
GASでは、「Gmailサービス」を使うことで、メッセージの送信や下書きの作成を簡単に行えます。時限式のトリガーを使えば、毎日決まった時間帯に下書きを作成しておくことも可能です。
連載第13、14回では、ToDo完了時のメール送信を自動で行うツールを題材に、イベントに応答して処理を実行する方法をお伝えしました。
VBAでもGASでも、セルの値の変更をきっかけとしてプログラムを動かすことが可能です。VBAではイベントプロシージャという形でその機能が提供されています。セルの値の変更以外にも、多種多様なイベントプロシージャを使用できるのが特徴です。
一方でGASでは、トリガーという仕組みを利用することができます。最大の特徴は、何といってもクラウドで動作するという点です。そのため、実行者がPCを開いていなくとも、決まった時間に動作をさせたり、他のユーザーの操作をきっかけに動作をさせたりすることができます。
本連載では、オフィスワーカー向けにVBAまたはGASで生産性を上げるための幾つかのツールと、その作り方について解説してきましたが、いかがでしょうか。連載で紹介してきたものは、実現可能なうちのごく一部であり、アイデア次第ではそれこそ無限といってもいいほどの可能性があります。ぜひ、皆さん自身で、独自のアイデアを膨らませて、それを実現すべくトライしてみてください。そして、それを通してスキルを磨き続けてください。
その習慣を続けることで、皆さんの働く時間の価値も継続的に高まっていくことにつながります。
高橋宣成
プランノーツ 代表取締役
「ITを活用して日本の『働く』の価値を高める」をテーマに、ExcelやVBA、G Suite、Google Apps Script、クラウドなどによる企業または個人事業主向けのシステムおよびツールの開発やコンサルティング、セミナー講師などを務める。「IT×働き方」をテーマに運営するブログ「いつも隣にITのお仕事」は月間60万PV達成。
高橋宣成著 秀和システム 1800円(税別)
動くコードが書けたその先、つまり「ExcelVBAを実務で使う」という目的に特化した実践書。ExcelVBAを楽に効果的に使いこなし続けるための知恵と知識、そしてそのためのビジョンと踏み出す勇気を提供する1冊。
詳解! Google Apps Script完全入門 〜Google Apps & G Suiteの最新プログラミングガイド〜
高橋宣成著 秀和システム 2600円(税別)
Google Apps Scriptの完全入門書として、JavaScriptの基本から自作ライブラリまでを徹底解説。これ一冊だけで基礎から実践まで体系的にマスターできます。
Copyright © ITmedia, Inc. All Rights Reserved.