
以下コードは、呼びだし元へ 値 を返しています
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も見ています
-
考えた式の戻り値が期待通りにならない
Excel(エクセル)
-
エクセル 入力があった場合のみ隣の関数を表示
Excel(エクセル)
-
(マクロ)参照渡しにて、違う変数でも 渡せるのはなぜですか?
Excel(エクセル)
-
-
4
Excelの計算が合いません。 諸事情で会計の簡素な購入・販売諸元表を作っているのですが、一つの項目
Excel(エクセル)
-
5
大容量があつかえるソフトを探しています
Excel(エクセル)
-
6
ExcelでASCを使って全角を半角にするとカタカナも半角になってしまいます。
Excel(エクセル)
-
7
【ExcelVBA】5万行以上のデータ比較の効率的な処理方法について
Visual Basic(VBA)
-
8
if関数。半角文字や全角文字で分ける事ができますか?
Excel(エクセル)
-
9
Visualbasicの現状について教えてください
Visual Basic(VBA)
-
10
excelVBAについて。
Excel(エクセル)
-
11
Excel セルにおけるフォント設定の取得
Excel(エクセル)
-
12
Excelでの文字色
Excel(エクセル)
-
13
シートの情報を別のシートへまとめる作業をしています。 ='sheet1'A3 といった具合に、該当の
Excel(エクセル)
-
14
【マクロ】シートを非表示した場合、シートの値を理由する場合でもマクロは有効ですか?
Excel(エクセル)
-
15
今まで文字化けなく開けていたcsvファイルが、文字化けするようになりました。 解決策を教えて頂きたい
Excel(エクセル)
-
16
excelVBAについて。
Excel(エクセル)
-
17
【マクロ】メッセージボックスにて、キャンセルをクリックしたら、マクロ終了。エクセルへ戻すには
Excel(エクセル)
-
18
【マクロ】複数の日付データをYYYY/MM/DDに読替えて、別ブックへ転記したい
Excel(エクセル)
-
19
納期順に勝手に並べ替えられるようにしたいのですが…
Excel(エクセル)
-
20
今までは、 「CSVの出力先を選択してください。」 という画面から、CSVファイルをデスクトップに引
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの関数について
-
エクセルの複雑なシフト表から...
-
エクセルのリストについて
-
【マクロ】元データと同じお客...
-
【画像あり】オートフィルター...
-
【マクロ】【相談】Excelブック...
-
【マクロ】変数に入れるコード...
-
エクセルシートの見出しの文字...
-
【マクロ】別ファイルへマクロ...
-
Office2021のエクセルで米国株...
-
【マクロ】数式を入力したい。...
-
【マクロ】実行時エラー '424':...
-
エクセルのVBAで集計をしたい
-
他のシートの検索
-
【マクロ】左のブックと右のブ...
-
Amazonでマイクロソフトオフィ...
-
vba テキストボックスとリフト...
-
【マクロ】【配列】3つのシー...
-
【マクロ】列を折りたたみ非表...
-
【マクロ】オートフィルターの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセル
-
【マクロ】WEBシステムから保存...
-
エクセルの循環参照、?
-
エクセル ドロップダウンリスト...
-
エクセルのdatedif関数を使って...
-
特定のセルだけ結果がおかしい...
-
【マクロ】A列にある、日付(本...
-
【マクロ】EXCELで読込したCSV...
-
【マクロ】アクティブセルの時...
-
【エクセル】期限アラートについて
-
iPhoneのExcelアプリで、別のシ...
-
【関数】同じ関数なのに、エラ...
-
Excelの新しい空白のブックを開...
-
【マクロ】3行に上から下に並...
-
【マクロ】宣言は、何のために...
-
VBA チェックボックスをオーバ...
-
Excelについての質問です 並べ...
-
【マクロ】アクティブセルの2...
-
【関数】不規則な文章から●●-●●...
おすすめ情報