過去に自分が作った Excel VBA(マクロ)を改良する必要があるときに、プログラミングコードの解読に時間がかかることがあります。
時間があけば忘れてしまうのは当然なので、仕方がないことではありますが、
・コードのどこで何をさせているか?
・どういう意図でコードを書いたのか?
最終的には思い出さなければなりません。
でないと改良できませんからね。
この記事では、過去に作ったエクセルマクロ(Excel VBA)を解読する方法をお話しします。
過去に作った Excelマクロ(VBA)を解読する方法
さて、解読のためにやることはシンプルですが、けっこう時間がかかります。
それは仕方がないこととして、どのように解読すれば良いか、書いていきますね!
泥臭い作業です。
実行ボタンに組み込まれたマクロを確認する
私はボタンをクリックすることで、マクロの実行させることご多いです(昔も今も)。
そして、1つのシートにいくつものボタンを設置している場合がほとんどです。
ですので、それぞれのボタンに組み込まれているマクロ(プロシージャ)がどれだったか? 確認する作業が必要になります。
まず、ボタン(図形)を右クリックで選択します。
(左クリックだと実行してしまうので気を付けましょう。)
そして、「マクロの登録」を選択します。
するとボタンに組み込まれたマクロ名(プロシージャ名)が表示されます。
これで、エディタ(VBE)を開いてから、確認すべきプロシージャが分かります。
VBAコードは「Ctrl + F」で検索しまくる
さて、VBAコードを確認するためには、「Alt + F11」でエディタ(VBE)を開く必要があります。
さて、過去に作ったVBAコードのどこで何をしているか、解読しなければなりません。
そのときに超役に立つのが検索機能です。
「Ctrl + F」で、このウィンドウ↓ が出てきます。
検索キーワードを入れれば、英数字、ひらがな、漢字何でも検索できます。
検索する範囲も
・カレントプロシージャ(今いるプロシージャ)
・カレントモジュール(今いるモジュール)
・カレントプロジェクト(全コード)
の中から選択できます。
検索機能を使えば、引っかかったキーワードを順番に見て行くことができます。
はっきりいって、検索機能を使わずににコードの解読するのはきつすぎますね。
では、この検索機能を使って何を検索するか? 以下でお話ししますね!
プロシージャ名を検索する
まず、先にボタンに組み込まれたマクロ名(プロシージャ名)を確認することを買いましたが、そのプロシージャがどこにあるか検索すると早いです。
プロシージャも1つではなく、プロシージャ内で別のプロシージャを呼び出したりもしているので、検索して辿ることは大事です。
コメントを検索する
過去にコードを書いたときのコメントを検索すると、どこでどんな処理をやっているか? 追跡しやすいです。
変数の説明、これから行う処理の説明など、キーワードで検索したときに上手く引っかかればしめたものです。
変数を検索する
処理を追うのに変数の検索も重要です。
1つの変数をプロシージャの最初から最後まで使うこともあるので、重要な変数は使っているところを1つ1つ確認して行くと良いでしょう。
数年後に解読しやすいようにやっておくべきこと
過去のVBAコードを思い出すためやることはシンプルに上記のことですが、実際にやるにはどうしても時間がかかります。
ただ、最初にコードを書く段階で、後で思い出しやすいように少しでも工夫おけば手間はだいぶ減ると言えます。
最初にコードを書くときにやっておくべきことを書きますね。
とにかく至るところにコメントを残す
VBE上で「’」を打てば、それ以後に書いた内容は緑色で表示され、コメントとなります(コードとはなりません)。
このコメントは、とにかくできる限り細かく至るとこに残した方が良い</b>です。
そうすることで、後で解読のしやすさが全然違うからです。
・プロシージャで何をやろうとしているか
・変数の役割
・If 文でやろうとしている処理
・For 文でやろうとしている処理
・Select Case 文でやろうとしている処理
・
・
など、どれだけ多くても悪いことはありません。
コメントがほとんど無いコードの解読は本当に苦痛です。
コメントを書くのは面倒だったりしますけど、将来の自分のために残すようにしましょう!
変数名は役割が分かるように付ける
変数名は適当に付けるのではなく、英数字で役割が分かるようにしておきましょう。
横にコメントも残した方が良いです。
例えば、未払消費税の計算結果を入れる変数を「a」とか「b」とするよりも、「Mibarai_Syouhi」とした方が絶対に意味が分かりやすいですよね?
プロシージャを小分けにする
大がかりなシステムを作るときには特に、プロシージャを小分けにした方が良いです。
1つのプロシージャが長すぎると、どこで何をやっているか分からなくなっていまいます。
例えば「シートをすべてプリントアウトする」などのように、決まった処理を行わせるような場合、その処理用のプロシージャを作っておいて Call文で呼び出すようにした方が良いです。
Excel VBA(マクロ)を使うと、コードを分割したくなることがあります。特に様々な Excel ツールで共通して使うような部分があると、そこだけは分けておきたいと感じます。さて、そのようなときに Call ステートメントを使うと便利です。今日は Call ステートメントの使い方についてお話しします。1、Call ステートメントの使い方Call ステートメントの使い方Call ステートメントはプロシージャを呼び出すのに使います。以下のように記述します。Call プロシージャ名プロシージャとは VBA コードのかたまりで、1 つのプロシージャで1 ... 【初心者向け】Excel VBA(マクロ) 他のプロシージャを呼び出す Call ステートメ... - My タックスノロジー |
小分けにすることで、頭の中もパリッと整理されるので、解読もしやすくなること間違いありません。
階層構造を守ってコードを書く
階層構造を守ってコードを書くことも大事です。
私がここで言う階層構造というのは、改行したときにできる段差のことです。
For の次の行、If の次の行、Select Case の次の行など、デフォルトで改行した際に段差ができるように設定されています。
これをきっちり守ることも、頭の中を整理できるようにするために必要なことです。
まとめ
過去に作った Excelマクロ(VBA)を解読する方法について、お話ししました。
数年前に作ったコードを解読することは、けっこう大変なことです。
効率よく解読できるようにするために、最初にプログラミングする際にできる限りの工夫はしておくべきでしょう。
編集後期
新型コロナウイルスの影響で、各業界に混乱が生じていますね。
今はとにかく耐える時期だと思います。
コロナが収束する明日を信じて頑張りましょう!