事務仕事の完全自動化もできる!?VBA
データを滑らかに流す
本ブログの過去記事で記しているように、ホワイトカラーの定型業務は、PCにすでにインストールされているExcelやAccessで自動化できる。Windowsの機能もVBAから呼び出せる。インターネットともシームレスに連携できる。定型的な事務作業とは、先行する業務からデータを受け取り、集計し、後続の業務に加工データを渡す、その繰り返しだ。つまり、自動化とは人を介さずデータを最終目的地まで流し切ることだ。
時間管理もプログラムする
四六時中データをが流れ続けるようなことはほとんどない。データは一ヶ所で一定期間貯めておいて、定期的に後続の業務に連携する。例えば、注文が入った⇒前日の15:00から当日の14:59の注文データを配送センターに送る、といった具合だ。人間は時計を見ながら決まった時刻になると、データをまとめて後続の部署に送り出すという作業をする。このような業務は自動化できる。実現できる方法はいくつもあるが、例えば、Accessで注文を一元管理し、設定時刻になると、配送センターへ自動で1日分の注文をメールで送るというシステムが考えられる。メールだと、配送センター側で人間の手でメールを開く必要があるので、メールではなく、配送センター側のAccessに送るという方法もある。配送センター側のAccessがデータを受け取ったら、自動で配送伝票を出力するような仕組みにしておけば、自動化範囲が広がる。ビジネスデータはダラダラと流れているわけではなく、各部署で一定期間保管・チェックされたあと、後続の部署に引き継がれるという体制になっている。一定期間のデータの蓄積や、一定間隔でのデータ連携など、時間管理が自動化には重要なポイントの1つになる。
RPAはVBA+αで実現できる
昨今RPA(Robotic Process Automation)が各所で話題になっている。ホワイトカラーの定型業務を丸ごと自動化するテクノロジーだ。新しい言葉であるため、定義や用いられ方には幅がある。コンサルティング会社やSIerがITの組み合わせソルーションをRPAというパッケージ商品にしているので、PRAの中身は各社が独自にアレンジした既存技術の集合体だ。本ブログで記してきたように、多くのホワイトカラーの職場ではすでにRPAを実現できる環境は整っている。あとはプログラミングでアプリケーションを開発し、各アプリケーションをシームレスに連携するだけだ。MicrosoftのOfficeソフト(VBA)とWindowsの機能とインターネットの技術を連携したシステムを開発すれば、完全な自動化を実現できる。
インターネットと連携できるVBA
HTTP接続
VBAにはインターネットから情報を取得したり、インターネットに情報を発信したりできる機能がある。ブラウザを介して接続することもできるし、ブラウザを介さないで接続することもできる。インターネットとつながるにはHTTPというプロトコルで情報をやりとりする。
Web API
インターネットに接続して何が便利なのか?大きく2つある。1つ目はWebサイトの情報を取得することだ。URLを指定して目的のサイトに行き、目的の項目を探し、その項目の情報を取得する。株価や商品の価格など、多品目で複数サイトにまたがるリアルタイムの情報を知りたい場合、自動で取得できるアプリケーションがあると便利だ。2つ目はインターネットを介して目的のサーバー内部に接続することだ。あるサーバーの内部から情報を受け取りたい、または情報を届けたい場合だ。WebサイトまではHTTP接続で行ける。目的のWebサイトのさらに内部に接続するにはWebAPIという機能を使う。WebAPIはそのサーバー内部とやりとりするためのプロトコルのようなものだ。より正確に言えば、サーバーに格納されているアプリケーションを遠隔操作できる機能だ。離れた場所にあるアプリケーション同士がHTTPプロトコルでインターネット空間を介して、WebAPIで通信するということが至る所で行われている。そういう技術をExcelやAccessでも実装できる。
Googleサービスと連携
実際にインターネット上のどういうサービスと連携できるのか。例えば、Googleカレンダー。注文を管理するシステムがAccessで開発されているとする。注文情報の1つとして、発送日を登録する仕様になっている。注文情報の登録確定ボタンを押下すると、自動でGoogleカレンダーにも登録されると便利だ。Googleカレンダーを操作できるWebAPIはGoogleが公開しているので自由に使える。このようにHTTPとWebAPIを利用すればExcelやAccessでインターネット上のサービスと自由に連携できるのだ。
Windowsの機能をシームレスに利用できるVBA
ExcelVBAやAccessVBAで業務アプリケーションを作る優位性は様々あるが、Windowsの機能と組み合わせて使う例を紹介する。
タスクスケジューラ
あらかじめ時間を設定しておき、ExcelやAccessを起動させることができる。タスクスケジューラを使えば、人がPCを使わない夜中に大量の経理処理をAccessで行うことができる。日時の設定は毎日だけでなく、金曜日の4:00amなど自由な設定が可能だ。毎月月末に1回しかしない業務も設定しておけば、月末の決まった時間にAccessを起動させ、集計結果をExcelファイルで出力するという使い方もある。
サウンド
ゲームアプリケーションと違い、業務アプリケーションは音を出すものは少ない。しかし、何か緊急を知らせる機能として、音を出したい場合がある。常に画面を見れない状態で、ユーザーに注意喚起したいケースなどは効果音を鳴らすのが有効だ。音を出す機能自体はExcelやAccessにはないが、VBAでWindowsの機能を呼び出すことで、任意の音源を再生することができる。
コンピューター名
複数のPCで同時にAccessを利用するような場合、誰が使っているかを知りたいケースがある。そのような場合に、コンピューター名を取得して画面で確認できる仕様にしたい。他にも、ある特定のPCでのみ可能な機能をつける場合にコンピューター名を参照するプログラムが必要だ。
Officeの機能をシームレスに利用できるVBA
連携していないアプリケーションは手動作業の多くが残る
お客様情報と購入商品と支払い方法などを入力すればボタン1つで注文書を作成するExcelツールがあるとする。お客様情報はあらかじめマスタ情報としてシートに設定しておけば、注文書発行のたびに一から入力する必要はなく、選択するだけだ。商品情報もあらかじめマスタ情報としてシートに設定しておけば、選択するだけで済ますことができる。このExcelツールは特に問題ない。別に在庫管理ツールをExcelで開発する場合、在庫管理のExcelツールにも商品情報が必要だ。商品情報を注文書作成のExcelツールから手動でコピペしてくる必要がある。商品情報を追加・変更する場合、2つのExcelツールの商品マスタに追加・変更する必要がある。できれば1回で済ませたい。Excelツールがコピーされて使われる場合、すべてのExcelツールの商品マスタを手動で最新化する作業が発生することになる。
どれか1つならExcelVBA一択
学習コストがすぐ回収できる
ExcelVBA、AccessVBA、WordVBAなどがあるが、ノンプログラマーのビジネスパーソンが1つ選ぶならExcelVBAだ。ハードルが低い割に、短くてもすぐに役に立つプログラムが多い。ホワイトカラーの職場では、Excelで行っている業務は数え切れないくらいある。しかも身近にある。数分で開発したものでも、繰り返しの作業を楽にするプログラムがある。数行のプログラムで効果覿面なのがうれしい。
書籍が豊富
書店でのExcel関連書籍コーナーを見れば一目瞭然だが、多種多様な書籍が出版されている。やりたいことについてのプログラミングのヒントが必ずどれかに載っている。
喜んでもらえる人が一番いる
喜んでもらえるということは生産性が向上している証拠だ。開発者にとってこれ以上の励みはない。継続的なスキルアップ環境を作る意味でも、ユーザー満足は欠かせない。
VBAの帳票作成の優位性
紙はまだ当分なくならない
途中まではペーパーレスだが、最終的には紙で出力するニーズは多い。FAXこそ公衆電話のように見かける機会が少なくなってきているが、ビジネスシーンで紙を見ない日はない。紙で出力して、定規や蛍光ペンを使ってチェックする業務は、IT化で少なくなってきているが、取引先への定期的な売上報告などは、紙を前提にした報告書という形でやり取りされる。例えば、Eメールにエクセルファイルを添付する場合、受け取った方はそのエクセルファイルを印刷するので、実質的には紙ベースのコミュニケーションだ。
相手がPCを持っていないケース
私が開発した地方卸売市場の会計システムがある。現在もそのシステムは稼働しており、機能追加なども随時行っている。例えば、このようなシステムでは、競りの売り手、買い手に明細書を配布する必要がある。競りに参加されている方々は個人で参加されているケース、高齢者のケースが多い。そのため、EメールやPDFといった電子記録でのやり取りはできない。取引記録の形態は必然的に紙ということになる。