プロシージャについて解説【Excel VBA】

Excel VBA

今回は、以前の頁で作った出勤簿のプログラム3つを、サブプロシージャとして呼び出すプログラムの作成をご説明します。

メインプロシージャ

VBAでは本来、メインとなるプロシージャとサブプロシージャの区別はありません。 最初に起動したプロシージャがメインとなり、メインから呼び出されるプロシージャがサブプロシージャという呼び方になります。

他のプロシージャでサブプロシージャとなっているものを、メインとして単体で実行することもできます。

メインプロシージャの作成

自分で作成したプロシージャも、別のプロシージャから呼び出して使うことができます。

プロシージャを呼び出す時は、「Call」ステートメントを使います。 それでは、以前に作成した3つのプログラムを呼び出すメインプロシージャを作成してみましょう。

Sub KyuryoKanri()
    Call SetKinmuJikan
    Call DoutekiHairetsu
    Call KyuryoKeisan
End Sub

この「KyuryoKanri」という名前のマクロを実行すると3つのプロシージャが全て実行され、一つずつ実行する手間を省くことができます。

プログラムを一気に書き連ねるよりも、機能ごとに小分けにしてメインプロシージャから呼び出した方が、プログラムとしてスッキリまとまります。 修正や仕様を変更したい時なども、対象となるプロシージャを書き直すだけで済みますね。

ファンクションプロシージャとは

これまで作成してきたプロシージャは、それぞれ自己完結して終了するものとなっています。 自己完結するものとは別に、「戻り値」として値を返すプロシージャを、「ファンクションプロシージャ」と呼びます。

これまで作成してきたプロシージャとは宣言の仕方がちょっとだけ違いますので、構文を見ていきましょう。

Function ファンクション名(引数 As データ型) As データ型 '引数は省略可
    (プログラム)
    ファンクション名 = 戻り値
End Function

このような構文になります。 「戻り値」として返す値や、「引数」のデータ型を指定するのがポイントですね。 次の「戻り値」の項目で、例文も確認してみましょう。

戻り値

ファンクションプロシージャを実行した結果として、返す値を「戻り値」といいます。 簡単な例文を見てみましょう。

Sub GetModoriti()
    MsgBox (TestFunction)     'TestFunctionで取得した戻り値をメッセージ表示
End Sub

Function TestFunction() As Integer
    TestFunction = 11          '戻り値として固定の数字を返す
End Function

このプログラムを実行すると、メッセージとして「11」が表示されます。 今回は固定の数値を直接返していますが、「引数」という値を受け取り計算する、といったことも可能です。

引数

ファンクション内で計算等の「元ネタ」になる値です。 ちょっとこれだけだとわかりづらいので、例文を見てみましょう。

Sub TestHikisu()
    Dim i As Integer
    Dim j As Integer
    i = 25
    j = 36
    MsgBox (GetKakezan(i, j))   'ファンクションの引数として変数を渡す
End Sub

Function GetKakezan(Atai1 As Integer, Atai2 As Integer) As Integer
    Dim Modoriti As Integer
    Modoriti = Atai1 * Atai2     '渡された値を計算
    GetKakezan = Modoriti
End Function

単純にファンクションに「引数」として渡した値を掛けて戻し、メッセージで表示するプログラムです。 このプログラムのように、カンマで区切ることで「引数」はいくつでも指定することができます。

今回のまとめ

  • メインプロシージャを作ることでプログラムがスッキリ
  • ファンクションプロシージャでは戻り値を返せる
  • プロシージャは引数を受け取ることができる

今回はプロシージャの種類とファンクションの戻り値や引数についての説明をしました。 次回は、引数についての詳しい説明をしたいと思います。

コメント

タイトルとURLをコピーしました