ゆんの業務改善ブログ

①生産性向上 ②業務改善 ③自動化 について情報発信しています。VBAプログラムは本当初心者から他のアプリケーションを呼び出して使う上級者的な使い方まで幅広いレベルで解説していきます。

VBA 過去プログラムの使い廻しと呼び出し|開発効率向上

日々VBAで自動化ツールを作成していると、プログラミング自体を効率化したくなってきますよね。今回は過去に作ったプログラムの塊を流用する考え方を一緒に見て行きましょう。

目次

スクリプトを有効利用するという考え方

過去のプログラムを使い廻す

手っ取り早いのが過去のスクリプトの流用です。

例えば、入力するcsvファイルやエクセルファイルをユーザーに選択させる、というのは毎回似たようなコードです。その部分をCallステートメントで呼び出します。Callは他のプロシジャを呼び出すステートメントです。VBAでステートメントはプログラムの流れをコントロールするものです。

他のプロシジャを呼び出せると言う事は、自動化したい作業を細かく分割して、分割したモノを呼び出していけば良いと言う事になります。

プロシジャは使い廻せるように作っておく

前項で入力する「csvファイルやエクセルファイルをユーザーに選択させる」という例を挙げました。このように頻度の高い部分は後から呼び出すことを前提にしたプログラムにしておくのが良いです。エラーの対策もしっかり作りこんでおきます。プログラムによって処理が変わる部分だけ書き換えれば済むようにします。そして、どの部分を書き換えればよいのかをコメントアウトしておくとよいでしょう。

表示させるメッセージなどは、コードの中にベタ打ち売るのではなく、各プロシジャの冒頭に定数や変数として設定する事で、その部分だけを変更しやすくすることができます。このような開発効率を上げる工夫は、メンテナンス性の向上にも役立ちます。メンテナンス性まで気にかけられるようになれば、とっくに脱入門レベルにあると考えられると思います。

使い廻すコードはCallステートメントで呼び出す

使い廻すコードは標準プロシジャに長々と書くものではありません。一つの機能を達成するひと固まりを一つのプロシジャにしておきます。このようにすることで、Callステートメントで呼び出すことができます。このように細かく機能を分けた塊をCallステートメントで呼び出していくことによって、プログラムの処理の流れが良くなるメリットがあります。

Callで機能を呼び出していくとは、 下記のような感じです。

Sub 自動化サンプル_メイン()

    Call データAの取り込み
    Call データBの取り込み
    Call データの抽出作業
    Call 出力データの見た目を整える
    Call 出力データをデータAのフォルダに保存する
    Call OutLookのメールに出力データを添付する

End Sub

まず、各手順を順に呼び出すプロシジャを作成します。
この例ではデータAとデータBを取り込んだ後にメインの作業に移っています。このようにプログラムを細分化して呼び出す構造にすることは、使い廻しによる重複プログラム作成の手間を削減する以外に、開発の見通しをよくするというメリットもあります。

「きょうはデータの抽出作業の部分を作ろう」など開発の見通しも立ちやすくなります。仲間と手分けして作る時もプロシジャを機能ごとで分割すると、作業が進めやすいです。

なお、まだ作っていないプロシジャ名をCallで書いておくと、実行時エラーになるので、一旦コメントアウトし、プロシジャができたらコメントから戻しておきましょう。

将来的に上級者になったら

今回はプログラムを細かく分けて呼び出すことについて手順や注意点を見てきました。今後、上達してくると、さらに機能の塊と処理の流れの塊に分類する、という概念を取り入れる時が来るかもしれません。オブジェクト指向という考え方です。今は、気にしなくてもよいですが、将来、ある作業にまつわる機能が一つに集約されていたら使いやすいだろうな、と思う時が来たら、オブジェクト指向という考え方を調べてみてください。

開発効率向上のための過去プログラムの使い回しと呼び出しのまとめ

今回の記事の内容をまとめると下記の通りです。

  • プロシジャを使い廻すことで開発効率が向上できる
  • プロシジャは使い廻せるように作る
  • 使い廻すプロシジャはCallステートメントで呼び出す
  • 将来的には機能と処理の流れを分離するオブジェクト指向という考え方を取り入れる

開発効率がよく、メンテンナンス性に優れたVBAプログラム処理の流れをさらに深く知りたい方は、関連記事のリンクをご覧ください。それでは頑張っていきましょう!
<関連記事>