以下コードは、呼びだし元へ 値 を返しています
NETにて調べると、この場合、以下のようにfunctionプロシージャを
使うとあります。しかし、実際は、以下コードのようにsubプロシージャでも
値を返しています。実際、値を返す時は
subでもfunctionでもどちらでも良いのでしょうか?
ご存じの方、教えください
function sansyou(ByRef b As Long)
【コード】
Sub 値渡し()
Dim a As Long
a = 1
Call sansyou(a)
MsgBox a
End Sub
Sub sansyou(ByRef b As Long)
b = b * 2
End Sub
No.2ベストアンサー
- 回答日時:
「値を返す」という表現は普通は「関数の返り値で返す」という意味なので、文字通りに解釈するとfunction限定となります。
ただ、呼び出し元の変数を、プロシージャで変更するには、質問にお書きのように By Reでf渡した変数も、プロシージャ側でで変更できるので、この方法であれば、functionでもsubでも全く同じく可能です。
この「呼び出し元の変数が更新されること」を「値を返す」と呼ぶかは人によりけりでしょうね。呼んでもおそらく通じるので問題ないと思います。
引数の変数を更新したり、グローバル変数を更新したりしりする操作は「副作用」と言います。変数更新だけでなく、ファイルに書いたり、メッセージを出したりも副作用です。
「副作用がどういうものであるか」は、プロシージャの中味を読まないと(あるいはプロシージャの使い方説明書きを読まないと)分からないので、副作用を使わなくて済む処理であれば、普通は使いません。もちろん、副作用を使った方が分かり易いのであれば、使って問題ありません。
functionで配列を返り値とすることもできるので、「複数の値を返したい」であってもfunctionの返り値を配列やオブジェクトにすれば返り値が使えます。By Refでの引数更新とどっちが分かり易いかはケースバイケースで考えます。
No.1
- 回答日時:
>>subでもfunctionでもどちらでも良いのでしょうか?
どちらでも値を返すことができますね。
ただ1つの値だけを返す処理のとき、functionにしたほうがsubよりもわかりやすいと思います。
いくつもの値を返す処理の場合、functionよりsubのほうが適していると思います。
まあ、C言語やBasicで作るとき、グローバル変数を使うことも多いので、こういうことは、深く考えないこともありますが、オブジェクト指向の言語では、グローバル変数を使わないようにするので、意識する必要がありますね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) 標準モジュール Public mOnTime As Date Sub sample() '実行プロシ 1 2023/02/22 15:44
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/09 10:33
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/01/11 08:33
- Excel(エクセル) 【マクロ】for nextステートメントがわかりません。例あり。 6 2023/11/25 04:21
- Visual Basic(VBA) Excel VBAで並べ替えをしたい 3 2023/02/25 09:31
このQ&Aを見た人はこんなQ&Aも見ています
-
10代と話して驚いたこと
先日10代の知り合いと話した際、フロッピーディスクの実物を見たことがない、と言われて驚きました。今後もこういうことが増えてくるのかと思うと不思議な気持ちです。
-
スマホに会話を聞かれているな!?と思ったことありますか?
スマートフォンで検索はしてないのに、友達と話していた製品の広告が直後に出てきたりすることってありませんか? こんな感じでスマホに会話を聞かれているかも!?と思ったエピソードってありますか?
-
「覚え間違い」を教えてください!
私はかなり長いこと「大団円」ということばを、たくさんの団員が祝ってくれるイメージで「大円団」だと間違えて覚えていました。
-
プリン+醤油=ウニみたいな組み合わせメニューを教えて!
プリンと醤油を一緒に食べると「ウニ」の味がする! というような意外な組み合わせから、新しい味になる食べ物って色々ありますよね。 あなたがこれまでに試した「組み合わせメニュー」を教えてください。
-
【大喜利】【投稿~12/6】 西暦2100年、小学生のなりたい職業ランキング
【お題】 ・西暦2100年の「小学生のなりたい職業ランキング」で1位になった職業は何か教えてください
-
考えた式の戻り値が期待通りにならない
Excel(エクセル)
-
Excelの時刻の不思議
Excel(エクセル)
-
エクセル 入力があった場合のみ隣の関数を表示
Excel(エクセル)
-
-
4
(マクロ)参照渡しにて、違う変数でも 渡せるのはなぜですか?
Excel(エクセル)
-
5
【マクロ】Ifとwith ステートメントにて分からない部分があります
Excel(エクセル)
-
6
【マクロ】フォルダ内にあるPDFを合体させるには?有料版adobe必要?
Excel(エクセル)
-
7
Excelの計算が合いません。 諸事情で会計の簡素な購入・販売諸元表を作っているのですが、一つの項目
Excel(エクセル)
-
8
大容量があつかえるソフトを探しています
Excel(エクセル)
-
9
CELL関数のヘルプ文の意味?
Excel(エクセル)
-
10
数字入力後他の文字等が表示される方法について
Excel(エクセル)
-
11
2列に入っているデータを1列で表示する関数について
Excel(エクセル)
-
12
データチェックを行うエクセルマクロをおしえてほしい
Excel(エクセル)
-
13
【ExcelVBA】UTF-8(BOM無)でCSV保存するには?
Excel(エクセル)
-
14
Excelの数式の効率化について
Excel(エクセル)
-
15
【マクロ】functionプロシージャの、変数について
Excel(エクセル)
-
16
excelVBAについて。
Excel(エクセル)
-
17
Excelを無料で使うには? パソコン購入して、マイクロソフトに登録して そのままExcelがデスク
Excel(エクセル)
-
18
Excelの数値の小数点表示について質問です
Excel(エクセル)
-
19
ExcelでASCを使って全角を半角にするとカタカナも半角になってしまいます。
Excel(エクセル)
-
20
if関数。半角文字や全角文字で分ける事ができますか?
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~12/6】 西暦2100年、小学生のなりたい職業ランキング
- ・ちょっと先の未来クイズ第5問
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
桁をセルで区切って計算をした...
-
エクセルのセンス 参照するシー...
-
エクセルでAのセルに「家電」と...
-
エクセルで 45201 を文字列 202...
-
Excel初心者です。 Excelでやり...
-
AM8:30から翌朝8:30まで勤務す...
-
ファイルパスについて。
-
エクセルで作成した表の中にあ...
-
スプレッドシート(Excelでも良...
-
XMLHTTP60で前日のデータが取れ...
-
Excel初心者です、Excelの日付...
-
ファイルとフォルダの移動につ...
-
エクセルで作成した書類の印刷...
-
標準、数値、文字列・・・VLOOK...
-
エクセルのCOUNTAについて
-
ExcelVBAについて。
-
【マクロ】フォルダ内にあるPDF...
-
Excelについて。 以前、無料でE...
-
excelVBAについて。
-
スプレッドシートで適切な条件...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの警告について
-
excelVBAについて。
-
excelVBAについて。
-
UNIQUE関数、配列数式を使わず...
-
エクセルのデータ整理の方法
-
11ケタの数字を打つと、エク...
-
エクセルの関数ついて
-
エクセル初心者です 用語とか良...
-
エクセル2021 範囲指定印刷をす...
-
【マクロ】メッセージボックス...
-
Excelで合計を求めたいです
-
IEを使わずHTMLを取得する
-
1.5ヶ月分の費用按分 エクセル関数
-
エクセル初心者です 用語等まだ...
-
excelVBAについて。
-
エクセルの不調について
-
Excelで、毎月の月曜と金曜の合...
-
vbe でのソースコード参照(msgb...
-
エクセル数式に問題があります
-
アクセス2016 エクセル2016 重...
おすすめ情報