

エクセル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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) 3個のfileのセルデータを1個のfileのセルに貼り付けるVBAコードですが。 1 2023/02/20 09:21
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます 1 2022/10/15 16:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでダブルコーテーション入り...
-
EXCEL/VBA 変数の値をクリップ...
-
jsp~jspにhiddenを使って変数...
-
VB 2008のSQL文でスペースを削...
-
【VBA】複合代入演算子
-
アセンブラ > アドレッシングモ...
-
切り上げ
-
C言語 アロー演算子について質...
-
テキストボックスの値を変数に...
-
processing エラーで、 "cannot...
-
int→unsigned int キャスト
-
エラーの意味は? Lvalue req...
-
DataTableの値を変数に代入したい
-
デバックして何を入力すればい...
-
Variant型で宣言してるのにEmpt...
-
Excel VBAでイコール二回使えま...
-
DataColumn型の使用方法
-
Excel-vba 文字列と変数を...
-
C言語 exitの使い方
-
配列の値を置換するにはどうす...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでダブルコーテーション入り...
-
EXCEL/VBA 変数の値をクリップ...
-
jsp~jspにhiddenを使って変数...
-
[VBS]変数を定数に変換する方法...
-
テキストボックスの値を変数に...
-
Variant型で宣言してるのにEmpt...
-
エラーの意味は? Lvalue req...
-
整数xxxが大き過ぎますというエ...
-
C言語 列挙型(enum型)変数について
-
VBA 1行で複数の代入を行った...
-
gridViewの行選択解除
-
PL/Iについて、教えてください。
-
JavaScriptをURLから直接実行し...
-
Accessコンボボックスにレコー...
-
プログラミングで変数と関数の...
-
【VBA】複合代入演算子
-
ASP+SQLにてSessionがNullになる
-
無名関数のメリットがよくわか...
-
processing エラーで、 "cannot...
-
VBAプログラミングで質問です ...
おすすめ情報