![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
No.2ベストアンサー
- 回答日時:
VB(.NETは別)では、関数の戻り値を変数に入れない場合は、以下のようにかけます。
(下のように戻り値を変数に入れるときはかっこが必要です)---------------------------------------------------
MsgBox "カッコなし"
Dim intRet as integer
intRet = MsgBox("カッコあり")
--------------------------------------------------
次のような書き方はできません。
--------------------------------------------------
intRet = MsgBox "カッコなし"
--------------------------------------------------
この例のような戻り値を変数に格納する必要がない関数の場合、VBにおいてはそもそも括弧を省略して書ける作りになってるんですね。
ウ~ン、作った人は自分で使う場合は便利だろうけどムズカシ~イ。
分らなかったので1ヶ月間程本屋やネットの講座等で調べたけど、理由が書いてあるものは皆無。
NETは別だけどVBではそういう作りになっているんだという仕組みを知っていることに大変な驚き!
kafun-show君は感激で鼻がムズムズしてきました。
ありがとうございました。
No.4
- 回答日時:
引数を個々に括弧で囲うと強制的に値渡しになる、というのも知っておいたほうが良いよ。
Sub Foo(ByRef i As Integer)
i = i + 1
End Sub
Dim a As Integer
a = 0
Foo (a) ' aは変更されない
Call Foo((a)) ' aは変更されない
前者は値渡しになっているのに気付かないパターン。
せっかく時間をさいて回答いただきましたが、強制的な値渡しという言葉はkafun-showにはまだ難しくて理解できませんでした。勉強不足ですいません。徐々に実力を上げて理解できるようになろうと思います。
今度はもっと難しい質問ができるよう頑張ります。
ありがとうございました。
No.3
- 回答日時:
返り値を必要としない場合、括弧が不要と言うのは2の方のおっしゃる通り。
と言うより、括弧をつけるとエラーになります。(引数が1つの場合、計算の優先順変更の括弧と解釈されて、エラーにはなりませんが)。
個人的には、『関数呼び出しで返り値が不要の場合、Callをつけて呼び出しましょう』を、記述ルールにしています。
質問に書かれていたMsgBoxの例では、
Call MsgBox("学生ですか?。", vbYesNo, "確認")
となります。
この場合、必ず括弧をつける必要があります。
(引数のない関数を呼び出した場合は別です)
この記述のルールには
○括弧をつける、つけないに悩む必要が無くなる。
○返り値不要の関数の呼び出しと明示化される。
○仮にメッセージボックスを、OkOnly(通常は返り値不要)からYesNo(通常は返り値必要)に変更した場合に、書き換え箇所が少なくて済む。
と言った利点があります。
初めての参加だったので、回答があっても操作手順がわからず御礼が遅くなり失礼しました。
kafun-showも見習って以後Callをつけて書くことにします。
ありがとう。又よろしく。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) Excel VBA ユーザーフォーム 複数のユーザーフォームの閉じ方。 2 2022/04/27 11:29
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) 【VBA】印刷マクロのループ処理が反映されません 3 2022/08/09 02:15
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBA 選択範囲の罫線色の...
-
エクセルのマクロについて教え...
-
Outlookの「受信日時」「件名」...
-
2つのマクロでチェックボックス...
-
ExcelVBA シート名を複数セルか...
-
Excelで画像URLを1つずつセル...
-
VBA指定行削除
-
エクセルVBAにて =A1=B1とすれ...
-
Outlookの「受信日時」「送信者...
-
ワードVBA どの表か知ることは...
-
エクセルのマクロについて教え...
-
エクセルのVBAコードについて教...
-
Excel VBA 定義されたプロージ...
-
郵便番号検索APIにてget Elemen...
-
VBA実行後に元のセルに戻りたい
-
エクセルのマクロについて教え...
-
VBA ユーザーフォーム ボタンク...
-
Excel VBA マクロ あるフォルダ...
-
Vba SelStart、SelLen教えてく...
-
エクセルのマクロについて教え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
if等判定文での定数、変数の記...
-
型を調べる
-
perl 正規表現でエラー
-
perlのif文で・・・・・
-
perlのシングルクォートとダブ...
-
perlでの入れ子文字列削除
-
演算子と括弧
-
ある書籍で、見つけました、per...
-
msgboxに何故括弧がないの!
-
文字列比較
-
perl tr での変数の使い方
-
Perlでの改造方法
-
perlでの括弧対応チェック
-
例外処理のフローチャートの記...
-
Excel VBAでリンク切れをチェッ...
-
ユーザー定義関数に#NAME?が返...
-
VBAで別モジュールへの変数の受...
-
VBでグローバル変数を宣言するには
-
エクセルVBAでシートモジュール...
-
'Range'メソッドは失敗しました
おすすめ情報