プロが教える店舗&オフィスのセキュリティ対策術

エクセルVBAのプロシージャで値を渡す方法はどうしたらいいのでしょうか。
たとえば、下記のようなプログラムを書いたとします。

---------------------------------------------
Private Sub test_main()
Dim drink As String
Dim alcohol As String
Call test(cola, beer)
End Sub

Public Sub test_module(ByVal drink As String, ByVal alcohol As String)
Cells(1, 1).Value = drink
Cells(2, 2).Value = alcohol
End Sub

---------------------------------------------

このプログラムはもちろん不完全です。試してみたら動きませんでした。
やりたいことは、メインのプロシージャ(test_main)から、test_moduleを
呼び出し、同時に「cola」と「beer」の値を渡します。呼び出された先で、
エクセルのワークシートのセルに値を入力します。

重複しますが、それぞれの値「cola」と「beer」は変数「drink」と「alcohol」に代入されます。
この変数をcell(1,1)とcell(2,2)に入力します。
ワークシート上のcell(1,1)には「cola」、cell(2,2)には「beer」
と入力されます。
変数は数値ではなく、文字列です。

ポイントは、変数「drink」と「alcohol」をどのプロシージャに宣言するのか
また、変数に値「cola」と「beer」をのどプロシージャでどういうふうに代入するのか。
そして代入した変数をどうやって呼び出したいプロシージャに渡すのかです。

このようなことをするには、上記プログラムをどう書き換えたらよいのでしょうか。

A 回答 (2件)

Private Sub test_main()


Dim drink As String
Dim alcohol As String

drink = "cola"
alcohol = "bear"

Call test_module(drink, alcohol)
End Sub

もしくは

Private Sub test_main()
Call test_module("cola", "beer")
End Sub

にしてください。

また、一番最初の行に
Option Explicit
と入れておくと、今回の場合エラーが出るようになるので何かの助けになるでしょう
ちなみに、オプションの「変数の宣言を強制する」にしておくと勝手に付加されます

それと、以下のページも参考にしてください。

Excelでお仕事
プロシージャ間の変数の受け渡し(その2)
http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub0 …

変数のスコープはこちらを参考に

エクセルVBA講座「変数のすべて」
第5回 変数の適用範囲(スコープ)
http://pc.nikkeibp.co.jp/pc21/special/2007_gosa/ …


またCallは省略することもできます

Office TANAKA
Callステートメント
http://officetanaka.net/excel/vba/statement/Call …

この回答への補足

回答ありがとうございます。
質問した後、紹介してくれたサイト(エクセルでお仕事)を見つけました。

値を渡すのに
drink = "cola"
alcohol = "bear"
と定義しなければならず、二度手間だなと思っていましたが、
Call test_module("cola", "beer")
とすれば、宣言もせずに直に入れたい値を渡せるのですね。
””でくくればいいのには気がつきませんでした。

ありがとうございます。

補足日時:2011/04/05 21:28
    • good
    • 0

> drink = "cola"


> alcohol = "bear"
> と定義しなければならず、二度手間だなと思っていましたが、

定義しているのではなく、質問に書いていた
値「cola」と「beer」は変数「drink」と「alcohol」に代入
をしています

> Call test_module("cola", "beer")
> とすれば、宣言もせずに直に入れたい値を渡せるのですね。
> ””でくくればいいのには気がつきませんでした。

変数は数値ではなく、文字列です。
だから""でくくるということですので勘違いないようにしてください。
数値の場合は""でくくりません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!