VBA関係

VBAのシステム管理してて困ったこととかサンプルコードとか書いてます。

VBA プロシージャの引数と戻り値

一応サンプルコード置いてますが、解説とかがメインです。

 

'メインプロシージャ(ByRef)

Sub test_sub()

    Dim a as Long

    Dim b as Long

    Dim c as Long

    

    b = 10

    c = 5

    a = test_calc(b,c)

    

    MsgBox("a=" & a)

    MsgBox("b=" & b)

    MsgBox("c=" & c)

End Sub

 

'計算するプロシージャ(ByRef)

Function test_calc(ByRef d as Long, ByRef e as Long) as Long

    d = 15

    e = 20

    test_calc = d * e

End Function

 

 

Functionで戻り値の型を指定する場合、閉じカッコの後に as Longを記述します。(as Dateなど他の型も可)

引数のByVal、ByRef、戻り値のas Longは省略可能ですが、エラーの温床になるのでお勧めしません。ByVal、ByRefを省略した場合、ByRefが書かれたことになります。

 

ByValは引数を生成する時に値をコピーし、ByRefはコピーせずにそのまま参照します。

なんかByValは値渡し、ByRefは参照渡しっていうらしいです。面倒だから専門用語増やすなと言いたい。

 

ByValを使った場合、引数をいじっても遷移元のプロシージャでは値は変わりません。

ByRefだと、引数いじったら変わります。

基本引数を変えたい場面ってないのでByValでいいと思いますが、値コピーだから、恐らくメモリ食ってるのかな?とか思ったりします。が、詳しくは知りません。

怖かったらByValを使っておいて、気になった時に調べればいいと思います。