Excel VBA – 必見!関数の引数をコンパクトにする極意

  • このエントリーをはてなブックマークに追加
150626-1

はじめに

今回はVBA上級者けの記事になります。

ある程度VBAを使いこなせるようになってくると、
関数を自由自在に作って、
処理を共通化したり、分割したりと
色々な事ができてくると思います。

そして、共通化するための引数もドンドン増えていってしまい
以下のような状態になってしまうことがありませんか?

Sub 合計計算(a As Long, b As Long, c As Long, output As Long)

そして、機能追加するために引数がまた増える。
しまいには、引数であふれて何の処理か分からなくなってしまう。
こんな経験、誰もがあると思います。

同じ関数の引数を、以下のように、
コンパクトにする極意をお伝えしたいと思います。

Sub 合計計算(vo As valuObject)

引数をコンパクトにする具体的な方法

サンプルプログラム配下の通り。
セットした変数の合計値を求める簡単な処理です。
(a+b+cを計算する)

Type valuObject

    output As Long
    
    a As Long
    b As Long
    c As Long

End Type

'メイン
Sub main()

    'valuObjectを使える形にする
    Dim vo As valuObject

    '値のセット
    vo.a = 1
    vo.b = 2
    vo.c = 3

    '合計の計算(a+b+c)
    Call 合計計算(vo)

    '計算結果の表示
    MsgBox vo.output

End Sub

'計算
Sub 合計計算(vo As valuObject)

    '計算
    vo.output = vo.a + vo.b + vo.c

End Sub

実行後

150626-1

1 Typeブロック

Type valuObject

    output As Long
    
    a As Long
    b As Long
    c As Long

End Type

このブロックは、
色々な変数を格納できる箱の雛形を、
「valuObject」という名前で作るイメージです。

ここで宣言した「valuObject」のみを関数に受け渡して
関数に処理をしてもらいます。
そうすることで、関数の引数を1つだけにすることができます。

2 メイン処理

'メイン
Sub main()

    'valuObjectを使える形にする
    Dim vo As valuObject

    '値のセット
    vo.a = 1
    vo.b = 2
    vo.c = 3

    '合計の計算(a+b+c)
    Call 合計計算(vo)

    '計算結果の表示
    MsgBox vo.output

End Sub

まず、Typeブロックで作った箱の雛形「valuObject」を
雛形から、プログラムで使える状態に宣言します。
ここでは、変数「vo」という名前で「valuObject」を使えるようにしました。

その後、変数「vo」が持っている変数a~cに値をセットします。
例えば「変数a」に値をセットしたい場合は、
「vo.a」のようにします。

そして、関数「合計計算」を呼ぶために、引数「vo」を設定して呼び出しています。

3 関数「合計計算」

'計算
Sub 合計計算(vo As valuObject)

    '計算
    vo.output = vo.a + vo.b + vo.c

End Sub

変数「vo」が持っている変数a~cを足し上げ
結果を変数「vo」が持っている変数「output」に設定しています。

ここで設定した、変数「output」がそのまま残っているので、
呼び出し元処理である「main」のメッセージボックスに
以下の通り、計算結果が表示されるのです。

150626-1

もし、変数「d」を計算に追加したい場合、
上記のTypeブロックで変数「d」を追加すれば良い仕組みなので、
関数の引数に変数を追加する必要が全くないのです。

さいごに

このテクニックは、上級者向けのテクニックになりますが
使いこなすことができれば、
改修に強く、読みやすいプログラムを作成することができます。

ただ、使いこなすためには様々な前提知識が実は必要になります。
例えばオブジェクト指向の基本知識などです。
これらの知識については、またの機会に触れたいと思います。

─────────────── ★
中小企業診断士 かとう
専門は、IT活用による業務改善です。
★───────────────

お勧め:

  • このエントリーをはてなブックマークに追加

関連記事

  1. Excel VBA – VBAでHashMapを実現…
  2. 150701-2 Excel VBA – 2010 2013 マクロの…
  3. Excel VBA – CSVファイルをxlsxファ…
  4. 150629-2 Excel VBA – 最終行の取得 その2
  5. Excel VBA – 最終行の取得 その1
  6. Excel VBA – パスワード付きZIPファイル…
  7. Excel VBA – ブックを開く・閉じる(ope…
  8. 150625-3 Excel VBA – 必見!プログラム関数の探し方のコツ
PAGE TOP