
いつもお世話になっております。
IF ○○○○ Then
Call ○○○○なときのマクロ
Else
Call ××××なときのマクロ
Endif
というマクロを書きました。
(実際はかなり長くて複雑です)
Callを使用すると、
見た目がすっきりする以外に何かメリット
またはデメリットがあるのでしょうか。
以下の場合と何か異なるでしょうか?
IF ○○○○ Then
'○○○○なときのマクロの内容を記述
~~~~~~~
Else
'××××なときのマクロの内容を記述
~~~~~~~
Endif
ご教示いただければ幸甚です。
No.6ベストアンサー
- 回答日時:
こんにちは。
ご質問は、Call ステートメント自体の意義だと思います。
>見た目がすっきりする以外に何かメリット
というよりも、「明示的」に呼び出している点が、ひとつのポイントだと思います。私は、言語のタイプの問題は一切関係ないと思います。
そして、もう1つの重要なポイントは、呼び出されるプロシージャ側が、参照渡しであろうが、値渡しであろうが、Call ステートメントをすれば、少なくとも、呼び出し側 Main()で、その両者の使い分けをせずに済むという利点があるからではないでしょうか?
以下でいうと、(2)=[参照渡し] と(3)=[値渡し]を、Main側で処理を考慮する必要はないというより、出来ないわけです。だから、呼び出される側(Routine)で、ByVal=[値渡し]にすればよいわけです。(もちろん、以下の場合、出力値のない値渡しは意味がありません)
Sub Main()
Dim a As Integer
a = 1
Call Routine1(a) '....(1)
'Routine1 a '.........(2)
'Routine1 (a) '........(3)
MsgBox "a: " & a
End Sub
Sub Routine1(a As Integer)
'Sub Routine1(ByVal a As Integer) '値渡しの場合
a = a + 3
End Sub
多くは、共有プロシージャや共有関数に関して行うわけで、同モジュール内のサブルーチンで、そんな必要性はあまりないとは思います。参照渡しと値渡しがはっきりしていない状態では、Call ステートメントはあまり意味がないけれど、私個人では、共有するものにしますが、掲示板では明示的に示す場合が多いかもしれません。構造化すること自体には、Call ステートメントは、あまり関係がないと思います。
No.5
- 回答日時:
短いマクロであればそうでもありませんが、基本的な考え方としては
・処理ごとに部品化する事で再利用しやすくする。
・マクロの処理順と関係なく機能ごとにまとめておけるのでメンテナンスや変更などが容易になる。
・問題が起きた時にどの機能が悪いのかテストしやすくなる。
などがあげられます。それよりも、見た目がすっきりすると言うのは結構重要で、みやすくなる事で打ち間違いなどのバグが少なくなります。
No.4
- 回答日時:
Excel は、操作したことのない門外漢ですが・・・。
Q、見た目がすっきりする以外に何かメリットはあるのか?
A、「大きなプログラムに潜在する複雑さに対処する」というメリットもあります。
次は、カーニハン&リッチーの関数(=マクロ)に関する指摘です。
Cの関数は、Fortran のサブルーチンあるいは関数、Pascal の手続きあるいは関数に対応する。
関数は、その中身に関して、何も心配しないで使えるようにある処理をブラックボックスの中につめ込むのに便利な方法である。
関数は実際、大きなプログラムに潜在する複雑さに対処するただ一つの方法となる。
うまく設計された関数に関しては、いかに処理されるのかということを無視して、何ができるのかを知っていれば十分である。
Cは関数の使用が、やさしく、便利で、かつ能率的であるように設計されている。
たった2~3行しかなくて、1回しか呼ばれない関数を見かけることがよくあるが、それは断片的なプログラムをわかりやすく、はっきりとさせるために使われているのである。
No.3
- 回答日時:
外に出して部品化することで、他のプロシージャからも呼び出せるようになるのが便利なのではないでしょうか?
またNo.2の方が触れている変数の扱いに関しても、値渡しでサブプロシージャに渡せば、
その値をサブプロシージャ内で変更しようが破棄しようがメインのプロシージャが保持している値には影響しないので、
そういう特性が生きるケースの場合には便利だと思います。
No.2
- 回答日時:
Call hogehoge(i,j)
または、
hogehoge i, j
で参照渡しとなります。
また、Call を付けない場合は、
hogehoge (i), j
とすると、i のみ値渡しで、
hogehoge (i), (j)
とすると i, j ともに値渡しです。
ここで値渡し,参照渡しについては参考URLを見てください。
参考URL:http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub0 …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 2つのマクロを連続して動かしたい 3 2022/09/20 23:46
- Visual Basic(VBA) ExcelのVBAコードについて教えて下さい。 2 2022/06/25 14:04
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/01/23 17:13
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 11:02
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Excel(エクセル) ExcelのVBAコードについて教えてください。 1 2022/06/20 09:22
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- Excel(エクセル) VBA 選択範囲とUnionの使い方について 8 2023/08/17 13:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
尿検査前日に自慰行為した時の...
-
値が入っているときだけ計算結...
-
至急!尿検査前日にオナニーし...
-
VLOOKUP関数を使用時、検索する...
-
【Excelで「正弦波」のグラフを...
-
MIN関数で空白セルを無視したい...
-
EXCELで式からグラフを描くには?
-
検便についてです。 便は取れた...
-
リンク先のファイルを開かなく...
-
ある範囲のセルから任意の値を...
-
2つの数値のうち、数値が小さい...
-
尿検査の前日は自慰控えたほう...
-
小数点以下を繰り上げたものを...
-
一番多く表示のある値(文字列...
-
Excel 数値の前の「 ' 」を一括...
-
風俗店へ行く前のご飯
-
値が入っている一番右のセル位...
-
EXCELで条件付き書式で空白セル...
-
彼女のことが好きすぎて彼女の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
彼女のことが好きすぎて彼女の...
-
イタリアから帰国する際、肉製...
-
2つの数値のうち、数値が小さい...
-
健否~書類の書き方~
-
VLOOKUP関数を使用時、検索する...
-
値が入っているときだけ計算結...
-
小数点以下を繰り上げたものを...
-
エクセルで空白セルを含む列の...
-
EXCELで条件付き書式で空白セル...
-
リンク先のファイルを開かなく...
-
ある範囲のセルから任意の値を...
-
精子に血が・・・
-
エクセルで数式の答えを数値と...
-
風俗店へ行く前のご飯
-
エクセル指定した範囲からラン...
-
一番多く表示のある値(文字列...
-
Excel 数値の前の「 ' 」を一括...
-
ワードのページ番号をもっと下...
-
MIN関数で空白セルを無視したい...
おすすめ情報