VBA – サブプロシージャから値を返す
In this Article
このチュートリアルでは、VBAでサブプロシージャから値を返す方法について説明します。
サブプロシージャは、値を返すために設計されているわけではありません。それは関数プロシージャの役割です。しかし、サブプロシージャの中でコードを実行しているときに、そのサブプロシージャから値を取得する必要がある場合があるかもしれません。このような場合、モジュール変数やグローバル変数を使用したり、サブプロシージャを使用してExcelシートに値を入力する方法があります。
値を返すために変数を使用する
モジュールレベルで変数を宣言することができます。そうすることで、モジュール内のどこででも変数を使用することができ、変数もその値を保持します。モジュールレベルで変数を宣言するには、コードモジュールの先頭で変数を宣言します。
Option Explicit
Dim dblQty as Double
Sub TestA()
'TestBサブを呼び出す
Call TestB
'イミディエイトウィンドウに変数の値を表示
Debug.Print dblQty
End Sub
Sub TestB()
'モジュール変数に値を入れる
dblQty = 900
End Sub
これらをまとめると、TestAを実行し、TestBを呼び出して、900という値を即座にウィンドウに表示させることになります。
この方法では、モジュールレベルでDim ステートメントを使用して変数が宣言されているため、モジュール内でのみ動作します。
グローバル変数
プロジェクトの全てのモジュールで使用するために、グローバルレベルで変数を宣言することができます。
サブプロシージャを使ってExcelシートへ入力する
サブプロシージャから計算された値を参照するもう一つの方法は、単純にデータをExcelシートに書き込んで、そのデータを別のプロシージャで参照することです。
Sub PopulateRange()
Range("A1") = "商品"
Range("B1") = "数量"
Range("C1") = "コスト"
End Sub
そして、セルの値を参照することで、別のプロシージャでその値を参照することができます。
Sub RetrieveRange()
Dim Product as String, Quant as Long, Cost as Double
Product = Range("A1")
Quant = Range("B1")
Cost = Range("C1")
End Sub