• ベストアンサー

excel vba

vbaプロジェクトで module1,2とフォルダがあって その中でmodule1のmacro_AAからmodule2のmacro_BB をcallできますか。 またコールした場合macro_BB は、macro_AAの変数を利用するには、どのような記述がいりますか。 (1)単に読むだけ (2)macro_AAの変数を書き換える 各場合について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.4

#1-2です。 KenKen_SPさん、アドバイスありがとうございます。「参照渡し(ByRef)」と「値渡し(ByVal)」ですね。勉強になります。 こういうことですね。 Sub macro_AA() Dim x As Long x = 90000 MsgBox "macro_AAです。macro_CCをコールします。変数xは" & x Call macro_CC(x) MsgBox "macro_AAにもどりました。今のxは" & x MsgBox "macro_AAです。macro_CCをコールします。変数xは" & x Call macro_DD(x) MsgBox "macro_AAにもどりました。今のxは" & x End Sub Sub macro_CC(ByRef x As Long) MsgBox "macro_CCです。変数xを「参照渡し(ByRef)」で受け取りました。x=" & x x = Int(x / 2) MsgBox "参照元のxを半分にしました。x=" & x End Sub Sub macro_DD(ByVal x As Long) MsgBox "macro_DDです。変数xを「値渡し(ByVal)」で受け取りました。x=" & x x = Int(x / 2) MsgBox "値のxを半分にしました。x=" & x End Sub

その他の回答 (3)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

おせっかいながら、、 > ’この後xを使うとxは半分になっているんですね? その通りです。 「参照渡し(ByRef)」と「値渡し(ByVal)」の違いについて調べて みて下さい。VBA では ByVal キーワード付きで引数を渡さないと 原則的に ByRef になります。 macro_AA での x を変化させたくないなら、#2 ご回答のように サブプロシージャ(関数を含む)内で変数 x を書き変えないか、 最初から ByVal 付きで引数を渡します。 ご参考までに。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

No1です。 > この後xを使うとxは半分になっているんですね? macro_BBの中ではそうです。 ひょっとして半分にした答えを再度macro_AAに持ってきたいということですか? それならこのようにしてみてください。 Sub macro_AA() Dim x As Long x = 90000 MsgBox "Function BBに働いてもらいます。変数xは" & x y = BB(x) MsgBox "Function BBから答えが返りました。" & y End Sub Function BB(x As Long) MsgBox "Function BBです。AAから変数xを受け取りました。xは" & x BB = Int(x / 2) MsgBox "xを半分にしyとました。yは" & BB End Function

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

Callできますよ。 こんな感じ。 Sub macro_AA() Dim x As Long x = 90000 MsgBox "マクロBBをコールします。変数xは" & x Call macro_BB(x) End Sub Sub macro_BB(x As Long) MsgBox "AAから変数xを受け取りました。xは" & x x = Int(x / 2) MsgBox "xを半分にしました。xは" & x End Sub

taktta
質問者

補足

Sub macro_AA() Dim x As Long Dim y As Long x = 90000 MsgBox "マクロBBをコールします。変数xは" & x Call macro_BB(x) ’この後xを使うとxは半分になっているんですね? y=x End Sub

関連するQ&A