- ベストアンサー
[ExcelVBA] Module1で定義した変数の(代入した)値を、Module2でも使う方法
基本中の基本のことで誠に申し訳ございません。 ある標準Moduleで宣言した変数に値を代入します。 その後、別のModuleでその変数を使用しますが、 その変数の中の値が消えてしまいます。 たとえば下記のように、プログラムを書きます。 test1を実行すると、続いてtest2も実行されます。 この場合、変数の値が0になってしまいます。 このような場合どうやったらいいのでしょうか? Hensuu1の値をセルに一度出力させて、 別のModuleで、セルの値をもう一度変数に代入させて使用する という方法で何とかしていたのですが、大変で困っています。 Module1に記載------------ dim Hensuu1 as integer sub test1() Hensuu1 = 100 test2 end sub ------------------------- Module2に記載------------- sub test2 range("A1") = Hensuu1 end sub --------------------------
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
(1)引数で渡す Sub test01() hennsuu = 10 test02 (hennsuu) End Sub Sub test02(hennsuu2) MsgBox hennsuu2 End Sub ーー Test01を実行。10と表示されるが、test01->test02に値が引き継がれたことがわかる。 ーーー (2)Public変数を使う Public hennsuu Sub test01() hennsuu = 10 test02 End Sub Sub test02() MsgBox hennsuu End Sub ーーー (3)エクセルの場合 シートのセルを使う Sub test03() hennsuu = 20 Range("A1") = hennsuu test02 End Sub Sub test04() hennsuu = Range("A1") MsgBox hennsuu End Sub エクセルのシートのデータは変数のスコープと関係ないので VBAなどの場合、必要なときシートの値を参照できるので便利であるが 、スマートでないが、大きく見てエクセルのシートが変数群と言えなくも無いと思う(妄想かも知れないが、セルに対応したメモリ記憶領域参照しているはず)
その他の回答 (1)
- t-aka
- ベストアンサー率36% (114/314)
簡単に言うとスコープ(適用範囲)が違います。 モジュール間を跨げない変数定義となっています。 これを解消するためにパブリック変数を利用します。 どちらのモジュールでも構いません。 モジュールの一番上(Declaration)のところに Public Hensuu1 as Integer とすればいけますよ。