VBA Functionプロシージャで複数の値を
エクセルでVBAのFunctionプロシージャについて複数の値を戻り値として
受け取る方法を考えています。
下記のようなサンプルプログラムを作りました。
---------------------------------------------------------------------------------
Option Explicit
Private Sub CommandButton1_Click()
Dim kekka(3) As Double
Dim txt As String
txt = "12.12A,34.34B,56.56C,78.78D"
kekka(0) = test(txt)
End Sub
Public Function test(ByVal text As String) As Double
Dim txt_kakou(3) As String
'## 渡された「txt = "12.12A,34.34B,56.56C,78.78D"」を加工し、数値のみを取り出し
'## 下記のように配列txt_kakou(3)に振り分ける
'## 加工方法は割愛
txt_kakou(0) = 12.12
txt_kakou(1) = 34.34
txt_kakou(2) = 56.56
txt_kakou(3) = 78.78
'string型からdouble型に変換する。
txt_kakou(0) = CDbl(txt_kakou(0))
txt_kakou(1) = CDbl(txt_kakou(1))
txt_kakou(2) = CDbl(txt_kakou(2))
txt_kakou(3) = CDbl(txt_kakou(3))
test = txt_kakou()
End Function
-----------------------------------------------------------------------------------
まず、呼び出し側のプロシージャでkekka(3)という配列を宣言します。
次に変数txtに「"12.12A,34.34B,56.56C,78.78D"」の文字列を代入します。
そして変数txtをFunctionプロシージャに投げます。
Functionプロシージャでは、受け取った「"12.12A,34.34B,56.56C,78.78D"」
を数値のみに分解し、4つの変数に代入します。
この4つの変数も配列で用意し、txt_kakou(3)とします。
このtxt_kakou(3)を呼び出し元に返し、呼び出しもとの変数kekka(3)に入れたいのです。
また、はじめ変数txtに代入される値は文字列ですが、この文字列をFunctionプロシージャで分解し、
分解した値は、最終的には数値として扱いたいので、途中でdouble型に変換しています。
これを実行すると、Functionプロシージャの最後のtest = txt_kakou()で、型が一致しません
といわれてしまいます。
どのように書き直せばいいのでしょうか。
よろしくお願いします。
お礼
やはり例の場合は、subでもFunctionでもかわらないのですか。 「マクロの「プロシージャの実行」から呼び出せる」 というのは、 アクセスの テーブル クエリ レポート フォーム マクロ の「マクロ」の事を言ってますか? まだまだ不慣れなもので、 マクロとVBAの違いがよくわかっていませんのです。 フォームにコマンドボタンを設置して、 「クリック時」プロパティ欄に、=MyName()をやってたところ、 サンプル通りになりました。 試しに、 Public Sub MyName() MsgBox Screen.ActiveControl.Name & "をクリックしました。" End Sub にしてみたところ、 「イベントプロパティに指定した式クリック時でエラーが発生しました: 指定した式に、Microsoft Office Access が見つけることが出来ない関数名が含まれています。」 となりました。 だから、Functionでないとダメなのですね。納得です。ありがとうございました。