Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11606 / 76734 ←次へ | 前へ→

【70661】Re:保存
発言  UO3  - 11/12/14(水) 0:31 -

引用なし
パスワード
   ▼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 と指定されたのですか?

3 hits

【70657】保存 situmon 11/12/13(火) 20:59 発言
【70658】Re:保存 UO3 11/12/13(火) 21:42 発言
【70660】Re:保存 situmon 11/12/13(火) 22:43 お礼
【70661】Re:保存 UO3 11/12/14(水) 0:31 発言

11606 / 76734 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free