Excel VBA質問箱 IV

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

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


52758 / 76736 ←次へ | 前へ→

【28808】Re:引数の使い方
発言  ichinose  - 05/9/15(木) 9:03 -

引用なし
パスワード
   ▼さくらんぼ さん:
おはようございます。

>みなさま、本当にどうもありがとうございました。
>おかげさまで、できるようになりました。
>
>
>>ちなみに、Callで呼び出す場合において、グローバル変数で値を渡す方法は
>>私はあまり推奨しません。
> ↑
>最後に、なぜ推奨できないのか教えていただければ嬉しいです。

私も「グローバル変数で値を渡す方法」は推奨しません。


それは、コードをトレース(特に他人の書いたコードを読むと実感します)する場合、
「パラメータ渡しの方法」がわかりやすい手続きですし
(どの変数が引数として使われているかということがわかりやすい)、
又、何らかの原因でコードの修正を求められた時に「グローバル変数で値を渡す方法」よりも「パラメータ渡しの方法」がよりミスの少ない修正が可能だと思うからです。

VBAでは、プロシジャー間のパラメータ渡しが可能になっていますが、
他言語で、これが出来ない仕様の言語を経験したことがあります。
泣く泣くグローバル変数渡しを使うのですが、この場合は、コメントも詳細に記述しなければなりませんでした。

Sub main()
  A=3
  B=5
  Call tashizan()
  Msgbox C
End sub

別の標準モジュール


Public A as long
  Public B as long
  Public C as long
‘====================================================
Sub tashizan()
  C=A+B
End sub

この例でもtashizanというプロシジャーに対して、
A,B,Cが引数であるというコメントがないと
時間が経てばわからなくなってしまうと思いませんか?
また、この場合、引数としての変数名はA,B,Cと固定の手続きになってしまい、
コードの柔軟性という観点からも「パラメータ渡しの方法」が望ましいと思います。

Sub main()
  Dim myvalue1 as long
  Dim myvalue2 as long
  Dim ans as long
  Myvalue1=3
  Myvalue2=5
  Call tashizan(Myvalue1,Myvalue2,ans)
  Msgbox ans
End sub

別の標準モジュール

‘====================================================
Sub tashizan(Hensu1 as long ,Hensu2 as long,Kotae as long)
  Kotae = Hensu1+ Hensu2
End sub

というようにパラメータ渡しの方が「引数の行方が明確になっている手続き」だと思います。
コードが複雑になったものであれば、
この違いがメンテナンスを行うにあたって大きいと思いますよ。

一昔前のプログラマだった(今は違いますが)私の世代では、
「マイヤーズの複合設計法」という手法をとおしてこういう事は
学んだ記憶があります(当時は結構有名だったと思います)。

まっ、買うことはないと思いますが、図書館などで見つけたなら一読してみては?
0 hits

【28571】引数の使い方 さくらんぼ 05/9/9(金) 13:02 質問
【28572】Re:引数の使い方 ちくたく 05/9/9(金) 13:08 回答
【28573】Re:引数の使い方 さくらんぼ 05/9/9(金) 13:32 質問
【28591】Re:引数の使い方 ちくたく 05/9/9(金) 16:25 発言
【28574】Re:引数の使い方 Jaka 05/9/9(金) 13:38 回答
【28590】Re:引数の使い方 さくらんぼ 05/9/9(金) 16:11 質問
【28596】Re:引数の使い方 Jaka 05/9/9(金) 17:09 発言
【28667】Re:引数の使い方 さくらんぼ 05/9/12(月) 16:07 質問
【28673】Re:引数の使い方 Jaka 05/9/12(月) 16:50 発言
【28674】Re:引数の使い方 小僧 05/9/12(月) 16:52 発言
【28680】Re:引数の使い方 でれすけ 05/9/12(月) 20:43 発言
【28764】Re:引数の使い方 さくらんぼ 05/9/14(水) 10:07 お礼
【28808】Re:引数の使い方 ichinose 05/9/15(木) 9:03 発言
【28809】Re:引数の使い方 さくらんぼ 05/9/15(木) 9:18 お礼
【28670】Re:引数の使い方 小僧 05/9/12(月) 16:41 発言
【28594】Re:引数の使い方 でれすけ 05/9/9(金) 17:04 回答
【28665】Re:引数の使い方 さくらんぼ 05/9/12(月) 15:46 お礼

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