Excelマクロ(VBA)からWebサーバーにアクセスするシステム


Webシステムのクライアント側(PC側)をExcelマクロ(VBA)で実装すると、表形式のデータをExcelシートで扱えるため、利便性の高いシステムを実現できます。

どのような方式か

Webシステムとはインターネットで利用できるシステムのことを指します。最も一般的なWebシステムはクライアント側にブラウザを利用しますが、Webシステムはブラウザが必須なわけではなく、このコラムでご紹介するようにExcelを使って実現することもできます。
(注:ブラウザで動作しているシステムがそのままExcelで動作するわけでありません)

Webシステムでブラウザを使う場合、ブラウザはサーバーが用意したHTMLを表示しJava Scriptで画面制御を行うことでユーザーインターフェイスを実現します。Excelを使う場合は、Excelマクロでサーバーから取得したデータをExcelシートに配置したり、ダイアログと呼ばれる画面を用いてユーザーインターフェイスを実現します。

Excelでファイルを開くときに「参照」ボタンのクリックでポップアップ表示される画面がダイアログの一例です。Excelマクロで独自デザインのダイアログを作成できます。

ブラウザを利用する場合のサーバーは、クライアントの要求に応じてHTMLを組み立ててレスポンスを返しますが、Excelを使う場合はクライアントの要求に応じて、HTMLではなく処理結果やデータだけを返す方法となります。Excelマクロはサーバーから取得したデータをExcelシートに貼り付けたり、表示を変更するわけです。

何が優れているのか

ユーザーの操作対象がExcelなので表形式のデータ操作に優れています。例えば指定した条件に合致する顧客データや売上データなどをExcelシートに取得できれば、Excelの機能を使うことでグラフを表示したり別のシートに転記したりすることが簡単です。

サーバー呼び出しはマクロで動作するので、一度システムができてしまえば、データ取得後に定型の業務処理、例えば月次の売上集計表をグラフ付きで別のExcelブックに出力し、関係者へのメール送信や印刷まで自動化するなど、業務に合わせた後からの拡張も難しくありません。

サーバー側の実現方法

サーバー側の開発はブラウザを使うシステムに比べ、画面(HTML)の作成を行わない分シンプルです。具体的にはExcelマクロから呼び出されるAPIを開発・配置することになります。APIの呼び出しはブラウザ用のシステムと同様に暗号化を伴うHTTPS通信が使えます。返却するデータはHTMLではなくJSONと呼ばれるシンプルな形式です。APIは(1)要求を受け付けて(2)サーバー処理を行い(3)結果を返すものなので、要件が合うならExcelに限らず他の用途、例えばシステム間の連携と共用できます。

ログイン画面と認証

ログイン画面はExcelマクロで表示する方法がよいでしょう。利用者によりユーザーIDとパスワードが入力されログインボタンがクリックされたら、ExcelマクロからサーバーのログインAPIを呼び出します。サーバーのログインAPIは、Excelマクロから受け取ったユーザーID・パスワードをあらかじめデータベースに格納してあるものと照合することでユーザーを認証します。

認証が成功したら、サーバーAPIではトークンと呼ばれる長いランダムキーを生成し、データベースにユーザー情報と紐づけて保存してからレスポンスとして返却します。

トークンはExcelでもログアウトするまで管理し、ログイン以外の全てのAPI呼び出し時にパラメータとしてサーバーに送信します。サーバー側ではこのトークンを確認することで認証したユーザーであることを識別するのです。

※パスワードは万一の漏洩を防止するため、平文ではなくハッシュ化したデータを保存する方法をとります。
※トークンには有効期限を設定することが一般的です。トークンの有効期限は操作性とセキュリティの要件に応じて設定します。トークンの有効期限が切れると、そのユーザーのサーバー呼び出しは失敗するので、ログインしなおす操作が必要になります。

自動アップデート

ブラウザベースのシステムはプログラムの実装は全てサーバー側にあるため、システムの更新はサーバープログラムの更新で行えますが、Excelを使った場合はExcelマクロの更新時はそのExcelブックを配布する必要があります。

Excelブックは手動で配布する方法もありますが、PCの台数が増えてくると運用コストが増加するため自動化が理想的です。アップデートの自動化は次をExcelマクロで実装し、ファイルをダウンロードするAPIと最新版のExcelブックをサーバーに配置することで行えます。

  • (1)Excelマクロ起動時にサーバーにファイルの最新バージョンを問い合わせる
  • (2)APIで必要なファイルをダウンロード
  • (3)ダウンロードしたファイルを差し替え

(3)はExcelマクロ実行中のファイル差し替えはできないので、ローカルに配置したVBScriptで行います。このVBScriptはExcelの終了を待ってファイルをコピーし、Excelブックを起動しなおす簡単な内容です。

(1)はバージョンを問い合わせるAPIを実装しても良いのですが、最新のバージョン情報を記録したテキストファイルをサーバーに配置し(2)のAPIでダウンロードする方法をとるとシンプルです。

開発コスト

Excelマクロ(VBA)はプログラミング言語としては、他の最近のプログラミング言語(C#, Swift, Kotlin等)に比べると機能面で劣りますが、複雑なプログラムを書くのでなければ生産性やメンテナンス性に大差はありません。逆に開発後にエンドユーザーが(希望するなら)自力でメンテナンスできる点で優れています。

システム全体の開発コストは仕様次第ではあるのですが、Webシステムと比べて大きくは変わらないと考えてよいかと思います。また、Excelの機能を活用する部分に限っていえば大きくコストダウンできます。

PR

コンポーネントデザインではExcelを使った業務システムの構築、メンテナンスを受託致します。お気軽にご相談ください。

お客様が表や式、マクロ等を利用して作成したExcelブックをベースに、データをサーバーに反映したりサーバーのデータを自動で取り込んだりする仕組みを追加できます。新規のサーバーではなく既存システムとの連携も可能です。(多くの場合、既存システム側の変更が必要です)
私どもでExcelブックのデータをサーバーに登録したりサーバーのデータをExcelブックに自動取得する仕組みを開発することで、その後お客様が自力で表やマクロでデータを活用する「エンドユーザーコンピューティング」のお手伝いができます。