
No.3ベストアンサー
- 回答日時:
使いやすい方のどちらかですね。
どちらかというと、後者のモジュールレベル変数ですね。
'------------------------------
Private Sub test1()
Dim x, y, z
x = 1
y = 2
Call test2(x, y, z)
'*
Dubug.Print z
End Sub
Private Sub test2(x, y, z) '参照渡しで
z = x + y
End Sub
'別案-----------------------------
Private z 'モジュールレベル変数で
Private Sub test1R()
Dim x, y
x = 1
y = 2
Call test2R(x, y)
'*
Debug.Print z
End Sub
Private Sub test2R(x, y)
z = x + y
End Sub
'--------------------------------
前者が使いにくいのは、引数のデータ型とプロシージャのデータ型の不一致に振り回されるときがあるからです。
No.2
- 回答日時:
こんばんわ。
>zを持ち帰りたいのは一箇所のみです。
他の関数からもtest2を使用しているということでしょうか?
なら、
Private Sub test1()
Dim x, y,z2
x = 1
y = 2
Call test2(x, y,z2)
msgbox z2 'メッセージ
End Sub
↓-999 に設定したのはありえない数字を与えてください。
Private Sub test2(x, y,optional byref z as long=-999)
if z <> -999 then
z = x + y
end if
End Sub
では、どうでしょうか?
byref 宣言は、参照元の変数の値を変える宣言で、
optional は必要があるときだけ指定すればOKです。
No.1
- 回答日時:
こんにちは。
maruru01です。グローバル変数使ってもいいけど、普通はSubプロシージャではなく、Functionプロシージャを使うのでは?
Private Sub test1()
Dim x, y, z
x = 1
y = 2
z = test2(x, y)
MsgBox z
End Sub
Private Function test2(x, y)
test2 = x + y
End Function
それから、余計なことかも知れないが、変数はちゃんと型宣言した方がいいですよ。
早速ありがとうございます。
実際のコードではtest2は200行の処理を行っていて、zを出すために使っているのではなく、あくまでzはその副産物なんです。
またtest2は複数の箇所から呼び出されていますが、zを持ち帰りたいのは一箇所のみです。
わかりにくくてすみません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAに関する質問です 2 2022/03/30 22:44
- Visual Basic(VBA) 標準モジュール Public mOnTime As Date Sub sample() '実行プロシ 1 2023/02/22 15:44
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBA This Workbookモジュールを別ファイルにコピーする方法 1 2022/09/14 01:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【VB6.0】 あるフォームから他...
-
AccessのVBAで「イベ...
-
ユーザーフォームへのデータ入...
-
アクセスできない保護レベルエ...
-
他のフォームから別のフォーム...
-
C#のループでtextboxに値を入れ...
-
SavePictureで保存できない
-
テキストボックスを下から上へ...
-
VB.NETでのイベントの途中終了
-
Excel VBAでsub,dimは何の略?
-
Matlab/SimulinkのChirp信号に...
-
Excel ユーザーフォームで計算 ...
-
VBAのユーザーフォームで、テキ...
-
【VB.NET】テキストボックスに...
-
Would a text be "passage"?
-
VBAで入力数値について
-
三項でたとえば交換って
-
RichTextBoxで指定行の色を自動...
-
コンボボックスからテキストボ...
-
Pythonでのかんたんな物理シミ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PL/SQLのプロシージャ間でカー...
-
パーソナルXLSBのfuctionを呼び...
-
【VB6.0】 あるフォームから他...
-
【HTML、VBScript】HTAアプリケ...
-
プロシージャまたは関数の引数...
-
定数を構造体で・・・
-
HTML + VBScript で Sleep でき...
-
変数の宣言はすべきでしょうか...
-
分割コンパイルの方法がわかり...
-
【VBScript】変数のスコープ
-
ExcelのVBA。Staticな変数について
-
整数を二つ読み込み、それらの...
-
関数の引数
-
変数を複数のモジュール間で共...
-
access2007 copyfile困っています
-
VB6のFriendについて
-
VB.NETのグラフィック描画で困...
-
引数
-
VB初心者の私に教えてください!
-
プロシージャを呼び出したプロ...
おすすめ情報