

エクセル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」をのどプロシージャでどういうふうに代入するのか。
そして代入した変数をどうやって呼び出したいプロシージャに渡すのかです。
このようなことをするには、上記プログラムをどう書き換えたらよいのでしょうか。
No.1ベストアンサー
- 回答日時:
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")
とすれば、宣言もせずに直に入れたい値を渡せるのですね。
””でくくればいいのには気がつきませんでした。
ありがとうございます。
No.2
- 回答日時:
> drink = "cola"
> alcohol = "bear"
> と定義しなければならず、二度手間だなと思っていましたが、
定義しているのではなく、質問に書いていた
値「cola」と「beer」は変数「drink」と「alcohol」に代入
をしています
> Call test_module("cola", "beer")
> とすれば、宣言もせずに直に入れたい値を渡せるのですね。
> ””でくくればいいのには気がつきませんでした。
変数は数値ではなく、文字列です。
だから""でくくるということですので勘違いないようにしてください。
数値の場合は""でくくりません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでダブルコーテーション入り...
-
ラズベリーパイ B でgpioを使っ...
-
エラーの意味は? Lvalue req...
-
プログラミングで変数と関数の...
-
VBA 1行で複数の代入を行った...
-
jsp~jspにhiddenを使って変数...
-
Variant型で宣言してるのにEmpt...
-
コンボボックスの名前を変数に...
-
世界のナベアツ
-
VBAの定数の使い方で、計算値を...
-
VB 配列の内容をファイルに書...
-
excelの、ある数式内の{}の意...
-
VB6で配列を文字列に変換する方...
-
余剰演算子について教えてください
-
【エクセル】 関数による電子...
-
2つの列で重複するキーの数と...
-
ラジオボタンの値の取得につい...
-
足して100になるような乱数のア...
-
vbsでテキストファイル内の文字...
-
配列の座標指定について。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでダブルコーテーション入り...
-
エラーの意味は? Lvalue req...
-
EXCEL/VBA 変数の値をクリップ...
-
jsp~jspにhiddenを使って変数...
-
テキストボックスの値を変数に...
-
[VBS]変数を定数に変換する方法...
-
C言語 列挙型(enum型)変数について
-
processing エラーで、 "cannot...
-
Serialize(CArchive& ar)にて
-
整数xxxが大き過ぎますというエ...
-
最小二乗法
-
Variant型で宣言してるのにEmpt...
-
ラズベリーパイ B でgpioを使っ...
-
VBA 1行で複数の代入を行った...
-
C言語 アロー演算子について質...
-
processing "フラグcheckをfals...
-
Accessコンボボックスにレコー...
-
サブwindowをオープンして外部...
-
VBA 一つの変数への追加、selec...
-
【Excelマクロ】グラフの最小値...
おすすめ情報