マクロをブロックで実行していくと、変数を引き継ぎたくなる場合があると思います。その変数を別のマクロに引き継ぐ方法をご紹介します。
Call + マクロ名(変数) で変数を引き渡す
まず、変数を引き渡すマクロを記載します。
Sub 変数の引継ぎするマクロ() 変数 = 150 Call 変数の引継ぎされるマクロ(変数) End Sub
変数を引き受けるマクロを記載します。
Sub 変数の引継ぎされるマクロ(ByVal 変数) MsgBox "引き渡されたものは? " & 変数 * 2 End Sub
内容が無くてごめんなさい。これだけです。
説明するまでもありませんが、はじめの「変数の引継ぎするマクロ」で変数に150を入れて、
Call 変数の引継ぎされるマクロ(変数) で、2つ目の変数の引継ぎされるマクロを動かしたときに 変数を引き継いで、変数=150を渡し、Msgboxで変数×2を計算して表示するという内容です。
変数を計算して返す
似ていますが、少し違う動きをする以下のマクロ
Sub 変数の引継ぎするマクロ() 変数 = "150" MsgBox "初めの変数は? " & 変数 Call 変数の引継ぎされるマクロ(変数) MsgBox "引き渡されたものは? " & 変数 End Sub
Sub 変数の引継ぎされるマクロ(変数) 変数 = 100 End Sub
上記2つのマクロは、Call で変数の引継ぎされるマクロで変数を渡して、変数の引継ぎされるマクロ(変数)で、変数に100を入れて、初めのまくろに返しております。それなので、初めのマクロの5行目のMsgboxで示す変数は、100と表示されるということです。
私の方法
私は、プログラマーではないので、うまく動けばよいのです。それなので、プログラムで変数を引き継ぐと頭の中が訳が分からなくなってしまうので、せっかくエクセルなのだから、セルを利用すれば変数の置き場は、たくさんありすぎます。
Sub A1に変数をしまう() 変数 = 150 Cells(1, 1) = 変数 End Sub
Sub A1の変数として使う() 受けた変数 = Cells(1, 1) MsgBox "変数は " & 受けた変数 End Sub
マクロに書いてありますが、上記の場合は、エクセルのA1を変数として利用し、下のマクロで使うという内容です。
使っているシートと混同してしまう場合には、変数だけを扱うシートを用意すると、混同は避けられると思います。
コメント