|
▼situmon さん:
こんばんは
>ただfunctionとbyrefの使い分けは?
Function と byRef は、まったく異なるカテゴリーです。
・Function と Sub
SUbプロシジャは、戻り値を持たず、そのプロシジャ内で、一定の処理をするだけ。
一方、Functionプロシジャは「ユーザー定義関数」のようなもので、処理結果が
戻り値として返されます。
excelvba.pc-users.net/fol5/5_4.html
www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_110_02.html
www.officepro.jp/excelvba/sub/index6.html
・byRefとbyVal
Subプロシジャ、Functionプロシジャともに
byVal 引き数名 と記述すると、「値渡し」で、呼び出し側の変数の値のみが渡され
変数の場所は渡されません。
したがってプロシジャ内で引数で指定された変数を変更しても、呼び出し側の変数は
変更されません。
一方、byRef 引き数名と記述すると、「参照渡し」で呼び出し側の変数の場所が渡されます。
ですのでプロシジャ側で引数で指定された変数を変更すると呼び出し側の変数も変更されます。
じゃぁ、いつもbyRefがいいねと、そう思われるかもしれません。(デフォルトはbyRefです)
でも、自分の変数の値を処理の材料として渡すけど、変更してほしくない場合の方が多いかも。
そういった場合は、byValを指定します。
www.k1simplify.com/vba/tipsleaf/leaf340.html
www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_200_100.html
homepage1.nifty.com/CavalierLab/lab/vb/byvalbyref.html
>またなぜ今回のケースはfunction?
先にも書きましたけど、byRefにしておいて、最初アップされた形でもいいんですが
サブルーティンで値を取得して、それを戻り値にして返してもらうという構成の方が
わかりやすくありませんか?
たとえばシート上で、=SUM(A1:A10) なんて書きますよね。
これは意味としては、セルの値=SUM(A1:A10)
A1:A10 という引数を SUM というFunctionプロシジャに与えて処理をさせ、その結果を
戻り値として、セルの値 という変数に書き込んでいる。
このように考えていただくとよろしいのですが。
>publicと記載するのはどういった場合?
変数やプロシジャのスコープ(適用範囲)については
home.att.ne.jp/zeta/gen/excel/c04p10.htm 等に解説がありますが
ちょっとややこしいかもしれません。
Public Sub ABC()
Private Sub ABC()
Sub ABC()
ややこしくしている元凶(?)の1つは、モジュールによってPublicやPrivateを省略した場合の
デフォルトが異なるということかなと思っています。
いずれにしましても、標準モジュールでは、デフォルトがPublic ですから Public と、わざわざ
書く人は少ないですね。
★ところで、なぜアップされたコードで byVal と指定されたのですか?
|
|