Mutable_Yunの業務改善ブログ

業務改善や生産性向上のブログです。自動化の手段として、VBAやRPAの勉強に役立つ解説をしています。

VBA プログラムの開発効率を上げる誰でもできる5つの簡単な方法

VBAにおけるプログラミングでツールやシステムの開発効率を上げる、簡単な方法を紹介します。

この記事はVBAを勉強している全てのレベルの方が対象です。
レベルについてはExcel VBAの実力(レベル)を定義してみる 初心者~三段をご参照ください。

目次

開発効率を上げるとはどういうことか

開発効率を上げると言うことはどういうことかというと、ツールやシステムを作る時、リリースするまでに掛かる時間を短縮すると言う事です。軸としては時間そのものを短縮していく方向性と手戻りを防ぐ方向性があります。いずれも大事です。

ちなみに、タッチタイピングやタイピング速度を上げる事が本質ではありません。(できるに超したことはないけれど。)それでは順に見て行きましょう。

開発効率を上げる5つの方法

簡単な5つの方法は次の通りです。

  1. 自動構文チェックを外す
  2. 機能ごとにコードをスニペットにする
  3. 手戻りを防ぐ為に要件を簡単にまとめておく
  4. 仕様の決定方法をパターン化する
  5. コメントアウトを有効活用する

順に解説していきます。

開発時間を短縮する系

自動構文チェックを外す

これは超簡単にできるので是非ともやるべきです。VBE*1には自動で構文をチェックする機能がついています。これは大変恵まれたことです。実行するまで文法的なエラーが分からないと効率が下がってしまいます。

しかし、VBEは優しすぎてお節介感があります。実験します。

Sub エラーが出るプロシジャ()
    
    Dim i As Long
    
    for i = 2 to
    
End Sub

何かのデータを、ヘッダを除いた2行目から最終行まで処理しようとして、「for i = 2 to」まで書いた所です。

ここで、「あ、最終行の行番号を代入する変数を定義するの忘れてた」と気づいて、マウスでDim i As Longの下をクリックしたところです。(あるある?)

そして、このようなメッセージが表示されました。

マウスで行を変えた瞬間にエラーメッセージが表示された図
マウスで行を変えた瞬間にエラーメッセージが表示された

「いやいや、分かってるがな。いちいち言わなくていいよ」って感じです。で、わざわざOK押して消す。ムダですね。このメッセージを出さないようにしましょう。

ツール⇒オプション

ツール⇒オプションを押す図
ツール⇒オプションを押す

自動構文チェックのチェックを外す

「自動構文チェック」のチェックを外す図
「自動構文チェック」のチェックを外す

OKを押してできあがりです。先ほどと同じ事をしてみて下さい。きちんとエラー部分は色で分かる様になっていて、かつ、メッセージは表示されません。いいところ取りになりました。

機能ごとにコードをスニペットにする

スニペットとは、ひとかたまりのプログラムコードの事です。例えば、処理するワークブックをユーザーに選ばせて、開く、という作業は、VBAで自動化ツールを開発する際に、よく出てきます。

毎回同じ作業なので、この部分はまとめて使えるようにしておきましょう。皆さんは過去のツールをわざわざ開いて、コードをコピペしていませんか?いちいち開いてコピペするのは効率が悪いです。

VBEはエディタ自体にスニペットを保存する機能はありませんが、その代わり、モジュールごとインポート/エクスポートする機能があります。やってみましょう。

保存したいモジュールの上で、右クリック⇒ファイルのエクスポート

エクスポートするところの図
エクスポートするところ

保存先を指定すると、拡張しが「bas」というファイルができます。これでできあがり。使いたいときはインポートしたいところで右クリック⇒インポートで、ファイルに保存したモジュールを挿入することができます。

モジュール名は分かりやすい名前をつけてからエクスポートして保存しておくと良いでしょう。また、よく使うモジュールエクスポートしたbasファイルを保存するためのフォルダを用意しておけば、効率よくインポートできますね。

さらに強力な威力を発揮するのはフォームモジュールをインポートして使う時です。モジュールごとインポートすると言うことは、コードだけで無くユーザーフォームごとインポートすることができると言う事です。自分で同じようなユーザーフォームを毎回作るではなく、使い回しできる形でユーザーフォームを設計して、フォームモジュールをエクスポートしておけば、微修正を加えるだけで、素早く開発することができます。これは本当に強力です。

手戻りを防ぐ為に要件を簡単にまとめておく

ここからは手戻りを防ぐ系です。特に人に頼まれてツールを作るときに要注意なのが、一通り完成してテストの段階になってから「思ってたのと違う」とか「こういうつもりじゃなかった」と言う状態になることがよくあることです。口頭で言われたものを作るのではなくきちんとメモを残しておきましょう。

複雑な処理になると手直しをするのは大変です。For文が入れ子になっている中にIf文があって、さらにFor文が入っている、なんてコードになっている時に、「データの抽出条件を変えたい」などと言われたらなかなか大変です。(そもそも複雑な条件分岐にしなくて済む方法がないかも検討しましょう)手戻りを防ぐ為の工夫は大事です。

プロは要求仕様書(⇒どんな動作を求めているのか)や仕様書(⇒どういう風に実現するか)をきちんと作り込みます。そして、これらの作業をきちんとやるのは大変です。プロの世界ではこの部分の専門家がいるくらいなのに、VBAで気軽に自動化ツールを作ろうとしている私たちがきちんとした要件定義を目指すのは無謀です。

そこで、外してはいけないこと、大事なことに絞って要件をまとめるのが良いです。大事なことに絞るの「最低限」の目安は、その要件をまとめたメモを見れば、別の人でも同じ機能をもつツールが作れる最低限の情報レベルです。

仕様の決定方法をパターン化する

別の人でも同じ機能をもつツールが作れる最低限の情報レベルまでまとめるだけでも、大変な作業量となります。なので、どんなツールを作るにしても共通で確認しなければならないことはパターン化して、「依頼書」みたいなフォーマットにしましょう。

例えば下記の様なことは、毎回確認することになるので、依頼書としてパターン化しておきます。

  • ツール/システムの目的
  • 入力データのフォーマット
  • 入力データの保存先
  • 出力データのフォーマット
  • 出力データの保存先
  • 大まかな処理の流れ

このようなことが予め分かる様にしておいてから、聞き取り作業に入ると効率的に進みます。

コメントアウトを有効活用する

コメントアウトを有効活用する方法は、元エンジニアが実践しているプログラミングのコメントの使い方をマネしたらすごかったで詳しく解説しています。

開発効率の観点では、

  • 中断した作業を再開する場所がわかるようにするメモを書く
  • デバッグでエラーの原因をあぶり出す為に使う

が考えられます。例えば、「★」など、普通使わないような文字を使って作業再開場所や「とりあえず書いておく仮のコード」の部分にコメントを記入しておくことで、そこをCtrl + fで素早く検索することができます。

' ★★ここから作業再開★★

デバッグでエラーの原因をあぶりだすときに使う、とは、変数の流れを確認する時に、ある部分を本当に消してしまうのではなく、コメントアウトで一時的に消しておくことです。すぐに復活させることができるので、有効活用しましょう。デバッグの上達は開発の時間短縮に直結します。

おまけ

以上が、誰でもできる5つの簡単な方法でした。「誰でもできる」とは言えませんが、二段以上のクラスやオブジェクトの概念がわかる方は下を試してみましょう。

クラスモジュールをエクスポートして使い廻す

先ほどのスニペットの説明では、標準モジュールをエクスポートして、スニペット化しました。もちろんクラスモジュールも同様にできます。よく使うクラスをスニペットにできれば、もう、まさにオブジェクト指向って感じです。

以上、VBAでのプログラムの開発効率を上げる誰でもできる5つの簡単な方法でした。

*1:Visual Basic Editor。VBAのコード記述する為のエディタのこと。皆さんがいつも使ってるヤツです。