Excelマクロは業務の効率化に役立つものですが、「処理の内容がブラックボックス化する」「メンテナンスできる人がおらず、かえって手間がかかる」などの問題を引き起こすこともあります。Excelマクロとどう付き合うか、おさえるべきポイントをご紹介していきます。

Excelマクロを使うメリットとリスク

マクロとはMicrosoft Excelに標準装備されている「複数の手順を記憶して自動的に実行させる」機能です。
処理速度は人が手作業で行う作業とは比べ物にならないほど速く、今まで何時間もかけていたような作業がものの数秒・数分で終わるという劇的な効率化を狙えます。
また1度記憶させておけば何度でもその通りに動作してくれるため、定常作業において威力を発揮します。
さらに、人が手作業で行うとどうしても起きてしまうケアレスミスもマクロでは発生せず、処理結果を検証したり修正する時間も削減されます。
複雑な作業でも1度作りこんでしまえば、エクセルの操作が分からない人パソコンの扱いが不慣れな人であっても実行できるというところもメリットです。

一方、マクロが悪いわけではないのですが、マクロを使うことで業務に支障をきたしてしまうこともあります。例として、
・インプットに対してなぜこのアウトプットができるのか、マクロを読める人以外には処理内容がわからない(=ブラックボックス化)
・マクロは決められたことしかせず、人が見ればわかる異常にも気づかず処理を進めてしまう
・Excelマクロをメンテナンスできる人材がおらず、業務要件についてこれないという事態が起こる
などがあげられます。
内部統制の業務プロセス統制においても、マクロによりブラックボックス化された処理内容を調査し検証するのには労力がかかります。
こういった問題があるため、マクロの取り扱いについて苦慮されている方の声を聞くことがあります。

Excelマクロの問題は「作りやすく」「読みづらい」ことでおこります

上記のようなリスクがあるとはいえ、マクロによる定型作業効率化の効果は大きいものです。
効果は享受しつつ、リスクをどのようにおさえていけばいいかを考えてみます。
先ほどあげた問題点がなぜ発生するかですが、マクロ使用の着手のしやすさからくるソースコードの質のばらつきにあると筆者は考えています。

Excelマクロは大半のビジネスPCにインストールされている「Microsoft Excel」の標準機能ですので、Excelさえあれば誰でもマクロを作れる環境にあります。
その環境は悪いことではありませんが、それに加えてExcelマクロで使用する「VBA」というプログラム言語は、厳格な書き方をしなくてもある
程度動いてしまうという特徴があります。
プログラミング技術を学んでいる人であればソースコードの読みやすさや例外処理などを踏まえてプログラミングを行えますが、独学でマクロを始めた人の中には「今やりたい処理ができているようだから」とそれ以外のところに気を遣わずソースコードの作成を終えてしまうこともあるかもしれません。すると次回同じマクロを実行してもうまく動かなかったり、一見動いていても処理結果が間違っていたりというトラブルにつながってしまうのです。
また、通常Excelマクロは自分の業務を効率化したいというニーズから作り始められることが多いです。あくまで自分が使うためなので操作感は万人向けを意識して作らないでしょうし、ソースコードも自分がわかればいいという感覚で作成します。他の人がメンテナンスしようとしても、その人独自のルールで書かれたプログラムはなかなか読みにくいのです。

読みづらさという観点でいえば、一般的なプログラムはソースコードを追っていけば処理の流れを追えるのに対しExcelマクロはVBAだけでなくワークシートに書かれた数式なども見ていかなければ全体の流れを追えないという場面が多々あります。
きちんとメンテナンスしていくのであれば、むしろ他のプログラム言語よりも意識して「処理の流れを読みやすくする」ことが求められます。

Excelマクロの会社内での位置付けを決めましょう

会社の中でマクロを使う際の位置づけは、大きく2つに分かれます。
1つめは「社内で使っているシステムと同等」という考え方です。作成する際には仕様を明確に表したドキュメント等を用意し、メンテナンスも業務の1つとしてシステム開発と同様に設計・実装・テストの手順をきちんとふんでリリースするというものです。
もう1つは「あくまで便利ツール」という考え方です。この場合はあまり複雑な処理は書かず、単機能のマクロを組み合わせて使うような運用が想定されます。
いずれにしても、無管理状態のマクロが大量に作成されるような状態ですと同じマクロを何度も作ることになるなど非効率を生みます。マクロ一覧を部署ごとで管理するか、社内の特定部署(情報システム部など)で管理するかを方針として決め、作成からリリースの手続きを決めておくとよいでしょう。

Excelマクロは「読みやすく」「変えやすく」「捨てやすく」

会社内での位置づけを決めたところで、具体的にマクロを作成していくことになります。
VBAの記述そのものについては様々なサイトで情報を得ることはできますので、この記事では業務をExcelマクロで効率化する際におさえていただきたい点をいくつか述べていきます。

1.ソースコード内にコメントをなるべく記載する

システム開発と比べてVBAは作成者のレベル差が大きいものです。また、作成した当時は理解しているマクロの処理内容も数ヶ月後に見ると自分でもわからなくなることはあるものです。
そこで、半年後の自分が見てわかる・またはVBAの基本を学習した程度の知識がある人ならわかるようにソースコード内にコメントを残しておくとよいです。
処理内容そのものをコメントで書くというよりは、なぜそのような処理の書き方をしているかの理由などを残しておくとよいでしょう。

2.共通でよく使う機能はモジュール化する

マクロ作成時に処理の一部をコピーペーストしている頻度が多いと感じたら、その処理を関数にすることを検討してください。
同じ処理をコピーペーストで大量に作ってしまうと、その処理に変更があった場合に変更漏れなどを引き起こすリスクが高くなります。また、関数にしてそれを呼び出す方式にすると行数も短くなることが多くなり読みやすさにもつながります。

3.マクロ実行するための前提条件を明確にする

マクロを始めたばかりの時は、とにかく今おかれた状況においてマクロが正しく動作することだけに意識がいきがちです。
しかし、例えば年度が変わるとファイル名が変わったりファイルの置き場所が変わったり、またシート名やシートのフォーマットが変わったりということは当たり前のように発生します。
そうなった時にマクロが動かなくなり業務に支障が出ないよう、どういう前提が崩れるとマクロが動かなくなるのかをまとめておきましょう。前提としては下記のようなものがあります。
・シートのフォーマット上の制約(シート内の表の列を増やすと動かなくなる)
・シート構成(特定のシート名でないと動かない)
・ブック構成(特定の場所に「○○○○.xlsx」というファイルがないと動かない)

4.手作業でやる場合のプロセスも残しておく

マクロが何らかの原因で動かなくなった時には代替手段が必要ですが、マクロでどのような処理をしているかがブラックボックス化されていると手作業でどう処理すればいいか検討するだけでも時間をロスしてしまいます。
どういう手作業をどのようにマクロで自動化したのかを情報として残しておくことで、不慮の事態にも対応できるようにしておきましょう。
HIT.s法においては、ある業務をマクロで効率化する際には改善提案を起票します。改善前後のSチャートを履歴として残していくことで、過去のプロセスも遡って確認することができます。

5.今あるマクロにこだわりすぎない

処理が複雑になってくると、どこかを変更しようとした時に影響範囲が大きく修正工数がかさんでくることがあります。
そうなった時は、マクロで実装されている全ての処理が今の業務要件として必要なのか、過剰になっていないかを見直してみてください。必要な機能だけで1から作り直したほうが早いというケースもあります。

自分の手元作業をマクロで効率化するのは気軽に始められますが、本記事ではそこからもう少し話を広げ業務においてマクロを運用するという視点からご紹介しました。
Excelマクロとうまく付き合っていただくことで皆様の業務が楽になることを願っております!