VBA Functionプロシージャで複数の値をエクセルに戻り値として受け取る方法

このQ&Aのポイント
  • VBAのFunctionプロシージャを使用して、エクセルで複数の値を戻り値として受け取る方法について考えています。
  • 具体的なサンプルプログラムを作成し、受け取った文字列を数値のみに分解して、配列に代入します。
  • しかし、配列を戻り値として返そうとすると型が一致しないというエラーが発生します。書き直し方を教えてください。
回答を見る
  • ベストアンサー

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()で、型が一致しません といわれてしまいます。 どのように書き直せばいいのでしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

No2です。関数を以下に変更してください。 それこそエラーが出ないのでうっかり。 Private Function test(ByVal text As String, ByVal i As Integer) As Double Dim txt_kakou(3) As String Dim int_kakou(3) As Double '## 渡された「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" int_kakou(0) = CDbl(txt_kakou(0)) int_kakou(1) = CDbl(txt_kakou(1)) int_kakou(2) = CDbl(txt_kakou(2)) int_kakou(3) = CDbl(txt_kakou(3)) test = int_kakou(i) End Function

dansin_Goo
質問者

お礼

回答ありがとうございます!! こういう方法があったんですね。勉強になります。 また、Debug.Printなどもしらない機能だったので、今後 役に立ちそうです。ぱっと調べたところですが、これってあくまで確認するための機能で、 プログラム自体には何の影響も及ぼさないのですよね。 >何がしたいか… 質問文のコードは質問用に簡略したもので、意味のないプログラムのように見えますが、 実際に今考えているプログラムでは、文字と数値の混ざった文字列がいくつもあり、 それを文字と数値に分けなければなりません。その作業をFunction関数で行えば、コードを いくつも書かなくてすみます。 回答ありがとうございます。

その他の回答 (7)

回答No.8

No.1です。後で思い出したのですが、No.5さんに突っ込まれてますね。 >Public Function test(ByVal text As String) As Double() で戻り値を配列にする事はできると思いますが。。。 Variant の使用は極力避ける事をお勧めします。 No.5さんのおっしゃるとおりです。 自分が普段使わないので思い込みが入ってました。 失礼しました。

dansin_Goo
質問者

お礼

回答ありがとうございます。 いえいえ、ありがとうございます。 別の手法もわかったので、機会があったら使いたいと思います。

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.7

私は VB 系で10年ご飯を食べてきている職業プログラマです。 考えは古臭いかもしれませんが、堅実なコードを書けると思って います。 その経験からの助言です。 Debug.Print と MsgBox では影響が異なります。 特異な状況のみこの違いが問題になるのであれば、問題が 起こってから対処するのでも良いでしょうが、簡単に起こり 得るので書き込みました。 VB はイベント駆動型のプログラミングですので、どの位置に コードを書いても、イベントとは密接に関係します。 Debug.Print でデータの確認をすることを覚えたのであれば、 MsgBox は利用しないことをお勧めします。 (具体的な理由は前述。) プログラミングでは1行コードを書いた時点でもう、結果が 同じという事はありません。それが支障をきたすか問題なしか は別として、必ず何らかの影響があります。それを正しく 把握し、支障が無いように最大限の注意を払うべきです。 VisualBasic に限りませんが、やはり本家は実行ファイル(EXE) を作成する環境でしょう。VB.NET では、Debug 時と Release 時は扱いが違い、Release(製品出荷)時は Debug クラスを利用 したコードはコンパイル時点で削除されます。VBA ではその ような概念がありませんので、デバッグ用のコードは本番環境 まで残り続けます。この違いが分かりますか? デバッグ用のコードとはいえ、1行命令を書けばコストが 掛かります。処理時間を余分に消費します。それだけなら 「細かい事を言わなくても」って思いますか?テキスト 出力する時点で結構重たい処理ですけどね。 では、Debug.Printの引数にオブジェクトを指定した場合 でも同じですか? プログラムで破棄処理まで行なったオブジェクトの中身を 参照した場合に、特定の条件で VB が勝手にデフォルト インスタンスを生成してしまう事があるのをご存知ですか? 値を参照するだけのデバッグ用のコードがバグを生む事さえ そう珍しい事ではないのですよ? 開発環境が整備され、プログラミングの敷居が低くなったと いえ、プログラムを扱う時点で重要な事は変わっていないと 思います。少なくとも簡単に「支障ない」ということは難しい はずです。 初心者用に簡略化した説明をするならまだ分かりますが、常套 手段だという理由だけで、動作の異なるコマンドを等しく 「支障ない」と言い切るのは信じられませんでした。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.6

ボタンのクリックイベントで、 MsgBoxやDebug.Printをどの位置で使っているか よく確認せずにコメントが入っていますが。 VB.NETが何の本家か知りませんが、Debug.Print やメッセージボックスを途中データの確認に 使うことは何の支障もありません。支障が あるような使い方、あるいは支障があるなら そのとき考えればよろしいかと。 このような手法は他の開発言語、たとえば C言語などでもprintf関数を使ってデータの 推移の確認にすることは常套手段です。 あまり、他の回答者のコメントをいじくるのは 好きではないのでここでENDにします。

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.5

> じゃあFunctionが配列にできるかというと出来ません。 Public Function test(ByVal text As String) As Double ↓ Public Function test(ByVal text As String) As Double() で戻り値を配列にする事はできると思いますが。。。 Variant の使用は極力避ける事をお勧めします。 >>プログラム自体には何の影響も及ぼさないのですよね。 >はい、まったく。コード表を開くのが面倒ならば、 >Debug.Print kekka(0) のかわりに、 >MsgBox kekka(0) 本家の VB.NET だと Debug 表記はビルド時の動作に影響があります。 Release では必要なくなること前提に使います。 http://www5b.biglobe.ne.jp/~yone-ken/VBNET/special/sp05_DebugWrite.html 中間言語の話とかになるので VBA では関係無さそうですが。 また、MsgBox による確認は、処理の流れを止めてしまいますので、 イベントのデバッグなどには向きません。「MsgBox を入れたがために イベントの起こる順番が変わる」といった事が起こりえます。 (フォーカスがダイアログに移ったり、意識してないイベントが処理されたり しています。) >実際に今考えているプログラムでは、文字と >数値の混ざった文字列がいくつもあり、 >それを文字と数値に分けなければなりません。 参考にするなら、IsNumeric 関数がありますね。 配列で全ての答えが返ってくるより、1個々判定できた方が使い勝手が いいという設計ですが。 まぁ、"2E3"とかも数値に変換できる文字列として扱われてしまいます けどね。 # CDbl も同様。

dansin_Goo
質問者

お礼

回答ありがとうございます。 確かにvariant型は使わないほうがいい名とは思っていましたが、 それしか通用しなかったもので…。 Public Function test(ByVal text As String) As Double() にすればよかったのですね。 Debug.Print kekka(0) に関してなにやら議論がなされていますが、 私としては良くわからないので、ノーコメントで。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

>プログラム自体には何の影響も及ぼさないのですよね。 はい、まったく。コード表を開くのが面倒ならば、 Debug.Print kekka(0) のかわりに、 MsgBox kekka(0) >実際に今考えているプログラムでは、文字と >数値の混ざった文字列がいくつもあり、 >それを文字と数値に分けなければなりません。 なるほど。むしろこのほうがメインですね。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

実行する前に最初からコンパイルすると、 test = txt_kakou() で型が合わない、とエラーが出ると思いますが。 理由はNo1の方と同じです。 何がしたいのかよくわかりませんが、 CommandButton1_Clickの中身から推察して、 Private Sub コマンド0_Click() Dim kekka(3) As Double Dim txt As String txt = "12.12A,34.34B,56.56C,78.78D" kekka(0) = test(txt, 0) Debug.Print kekka(0) End Sub Private Function test(ByVal text As String, ByVal i As Integer) As Double Dim txt_kakou(3) As String Dim int_kakou(3) As Double '## 渡された「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 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(i) End Function のようなものになると思いますが。

回答No.1

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) 上記を下記のように修正(配列をパラメータで渡している) ⇒call test(txt,kekka(0),kekka(1),kekka(2),kekka(3)) End Sub Public Function test(ByVal text As String) As Double 上記を下記のように修正(パラメータの受け取り口を作る。厳密にはFunctionである必要はないけど、別に修正する必要もないのでそのままです。) ⇒Private Function test(ByVal text As String,pdlbkekka1 as Double ,pdlbkekka2 as Double,pdlbkekka3 as Double,pdlbkekka4 as 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)) 上記を下記のように修正(パラメータで渡された変数に代入してるだけ) pdlbkekka1 = CDbl(txt_kakou(0)) pdlbkekka2 = CDbl(txt_kakou(1)) pdlbkekka3 = CDbl(txt_kakou(2)) pdlbkekka4 = CDbl(txt_kakou(3)) 下記を削除(そもそも落ちている原因) test = txt_kakou() これで動くと思います。 なぜ落ちてるかと言うと、 test = txt_kakou() 代入しようとする値は配列変数ですが、test自体は配列じゃないから型不一致で落ちてます。 (testは単なるdoubleですよね) じゃあFunctionが配列にできるかというと出来ません。 なので、パラメータで変数として渡して代入した方が早いです。 もちろん他にも方法はありますが、手っ取り早くという観点で記載しました。

dansin_Goo
質問者

お礼

回答ありがとうございます。 なるほど、パラメータとして変数を渡す方法もあるのですね。 質問した後、いろいろいじくってたら、下記の方法でできるようです。 変数「kekka」、「kakou(3)」、「Functionプロシージャの型」をvariant型で 宣言しますと、型が一致しませんのエラーが起こらず、配列のまま値を返してくれることがわかりました。 ちなみに、最終的な値を格納する変数として、「ATAI(3)」をdouble型で新たに用意しました。 下記のコードです。これって何か問題あるのでしょうか。 ------------------------------------------------------------ Option Explicit Private Sub CommandButton1_Click() Dim kekka As Variant Dim ATAI(3) As Double Dim txt As String txt = "12.12A,34.34B,56.56C,78.78D" kekka = test(txt) ATAI(0) = kekka(0) ATAI(1) = kekka(1) ATAI(2) = kekka(2) ATAI(3) = kekka(3) End Sub Public Function test(ByVal text As String) As Variant   Dim txt_kakou(3) As Variant '渡された「txt = "12.12A,34.34B,56.56C,78.78D""」を加工し、数値のみを取り出し '下記のように配列txt(3)に振り分ける '加工方法は割愛 txt_kakou(0) = 12.12 txt_kakou(1) = 34.34 txt_kakou(2) = 56.56 txt_kakou(3) = 78.78 test = txt_kakou End Function -----------------------------------------------------------------

関連するQ&A

  • VBA プロシージャで値を渡す方法

    エクセル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」をのどプロシージャでどういうふうに代入するのか。 そして代入した変数をどうやって呼び出したいプロシージャに渡すのかです。 このようなことをするには、上記プログラムをどう書き換えたらよいのでしょうか。

  • VBAのプロシージャのことで

    TEST1のプロシージャ内に使用している readfileという変数の中にテストという文字列を代入し、 文字列が代入された状態で Callによって別のプロシージャを読みにいったとき TEST(変数)に入った文字列ごと持っていくには どの様に記述すればよいかどなたか教えていただけませんでしょうか・・・。。 ----------------------------------------------------------- Sub TEST () Dim readfile As String readfile = "テスト" Call TEST2 End Sub ----------------------------------------------------------- Sub TEST2() readfile ←テストという文字列をTESTプロシージャから持ってきたい End Sub ----------------------------------------------------------- 単純に書いてみたコードですが、この様なことは可能なのでしょうか? すいませんがいただけないでしょうか><;

  • Functionで戻り値を複数返す方法

    Functionで戻り値を複数取得したいのですが うまくいきません。(NULLの使い方が不正ですとエラー) 戻り値に配列を使う場合 呼び出し側はどのように記述すればいいでしょうか? <呼び出し側> Private Sub a() wkkekka1 = 処理結果(Kensu, Houhou)(0) ⇒ ここでエラー wkkekka2 = 処理結果(Kensu, Houhou)(1) wkkekka3 = 処理結果(Kensu, Houhou)(2) End Sub <関数> Public Function 処理結果(ByRef lngKensu As Long, ByRef strHouhou As String) Dim kekka(3) As Double If lngKensu = 1000 and strHouhou = aaaaaa then kekka(0) =  0.1 kekka(1) =  2   kekka(2) =  300 Else ↓ (省略)     ↓ End If 処理結果 = kekka End Function

  • access97でのFunctionプロシージャの使い方

    Access97で作業しています。 以下の記述で定義したレコードセットを同一の*.mdbのなかで共有したい(他のイベントプローシージャで呼びたい)のですが、どのようにするのでしょうか? これをFunctionプローシージャにする? Public にする? それと、このプロシージャで定義した変数名は他のイベントプロシージャでも使えるのでしょうか? プロシージャの性質も良く判らない状態です。宜しくお願い致します。 Dim strSQL As String Dim i, j, TOL, cnt As Integer Dim rsFLT, rsTBL As DAO.RecordSet Dim DB As Database Set DB = CurrentDb strSQL = "SELECT * FROM [Q-Order用] WHERE ID='" & [Forms]![F-Order用]![IDbox] & "'" Set rsFLT = DB.OpenRecordset(strSQL)

  • Excel VBA onTime関数のプロシージャ引数に、引数(変数)つきのプロシージャを呼び出す方法を教えてください。

    現在ExcelVBAで一定時間ごとにメッセージを出すツールを作成しています。 その際にonTime関数を使っていますが、その引数のひとつである呼び出すプロシージャに「引数(変数)つきのプロシージャ」を設定しようとしています。 サイトを探してみたところ、引数にシングルクオーテーションで囲むなど書いてあったのですが、変数を引数としたプロシージャを設定すると、「プロシージャが見つかりません」のエラーがでます。 どなたかお力を貸してくれませんでしょうか。 ちなみに僕のコードは以下の通りです。(簡略化) ------フォーム Private Sub cmbOk_Click() Call メッセージ実行(txtTime.Text, txtContent.Text) End Sub ------ThisWorkbook Private Sub メッセージ実行(ByVal time As String, ByVal content As String) Dim starttime As Double MsgBox time & "毎に" & vbCr & content & vbCr & "を表示します。", vbInformation Unload frmSet starttime = Now + CDbl(TimeValue(time)) Application.OnTime starttime, "'expressContent" & time & content & "'" End Sub ------標準モジュール Dim starttime2 As Double Sub expressContent(ByVal time2 As String, ByVal content2 As String) MsgBox "content2", vbInformation starttime2 = Now + CDbl(TimeValue(time2)) Application.OnTime starttime2, "'expressContent" & time & content & "'" End Sub よろしくお願い致します。

  • VBA Functionについて

    アクセスです。 サンプルコードを見ていてよくわからないので教えてください。 サンプルコードはこちらです↓ ------------------------------------------- Public Function kakaku(cost As Currency, rate As Double) As Currency kakaku = cost / (1 + rate) End Function Sub M0108() Dim Zeikomi As Currency Dim Zeiritu As Double Zeikomi = InputBox("内税の価格を入力してください。") Zeiritu = InputBox("税率を入力してください。") MsgBox (kakaku(Zeikomi, Zeiritu) & "円") End Sub ------------------------------------------- M0108を実行してみたら納得いく結果になったので問題ないのですが kakaku関数についてよくわかりません。 cost / (1 + rate) とはどういう意味なのでしょうか? costもrateも値が代入されていませんが、 この二つの変数は何の意味があるのでしょうか? ご教授よろしくお願いします。

  • Functionでの戻り値のとり方

    こんばんわ。 以下のように、Functionで引数に配列を指定して、戻り値も配列で取得したいのですが、方法としては以下のようにしかできないのでしょうか? ------------------------- '配列を宣言 dim Ary() as string dim AryRet() as string '戻り値の配列 Call Get_Ary(Ary(),AryRet()) ------------------------- Function Get_Ary(Ary() as string , AryRet() as string) 'Ary()を参照して、AryRet()を取得する End Function という風に書いているのですが、Functionのところを以下のように 書くのは無理でしょうか? うまく取れないというのはやっぱ無理なのかな・・ ------------------------- '配列を宣言 dim Ary() as string dim AryRet() as string '戻り値の配列 AryRet() = Get_Ary(Ary()) Function Get_Ary(Ary() as string) As string 'Ary()を参照して、AryRet()を取得する 'それを関数の戻り値とする Get_Ary = AryRet(index) End Function このように書くと、配列の最後のインデックスの値だけ取れてしまう ようなんですが、、やっぱ配列で返すというのは上記のやり方でないと 無理なのでしょうか? 詳しい方ご教示願います。

  • Functionプロシージャの便利さがわかりません

    私はVBAコードを作る時は、もっぱらsubプロシージャーを使ってしまうのですが、 http://excelvba.pc-users.net/fol5/5_4.html を参考に、 Functionプロシージャとsubプロシージャの違いを確認してみたのですが、 Functionプロシージャの便利さがわかりません。 *********************************** Sub Test() SubプロシージャとFunctionプロシージャのテスト i = 1 Call Subプロシージャ(i) i = Functionプロシージャ(i) MsgBox "Functionプロシージャ結果:" + CStr(i) End Sub Sub Subプロシージャ(ByVal i As Integer) MsgBox "Subプロシージャ結果:" + CStr(i) End Sub Function Functionプロシージャ(ByVal i As Integer) As Integer i = i + 1 Functionプロシージャ = i End Function *********************************** Functionプロシージャは、 (ByVal i As Integer) As Integer のように、、二回もデータ型(Integer)の指定をしなくてはいけないのでしょうか? リンク先の説明には、 「SubプロシージャとFunctionプロシージャの違いは Subプロシージャが引数を受け取るのみに対して Functionプロシージャは引数を受け取り、 戻り値を返すという関数としての役割を果たすことができる点です。」 と記載されてますが、 それはSubプロシージャでも出来てますよね? サンプルコードにおいてのFunctionプロシージャの便利さを教えてください。

  • Functionの使い方が分かりません。

    ACCESS 2013環境でVBAを使用しています。 プログラムが長い上、使用する箇所が多くて困っています。 Functionで、使いたい時だけ呼び出したいのですが うまく行きません。 二つのテキストボックスに入力された、文字を組み合わせて 文字列を生成するプロシージャを作成しています。  txt1の値が、岡山  txt2の値が、オカヤマ の時 先頭の文字列が ア行、続きは _岡山 となるよう AscW関数で文字コードで一度抽出し, select文で判別しています。 コードは --------------------------------------------- Private Sub コマンド1_Click() Dim kanji As String Dim katakana As Integer Dim sento As String Dim hensuu As String kanji = Me.txt1 katakana = AscW(Left(Me.txt2,1)) Select Case katakana Case 12450 To 12458 sento = "ア行" Case 12459 To 12468 sento = "カ行" ~(中略)~    Case Else End Select hensuu = sento & "_" & kanji MsgBox hensuu End Sub --------------------------------------------- となっています。 Select Case文が長いのと、複数のフォーム上で実行させるボタンごとに 同じコードを記述していて、最近Accessの起動が遅くなってきました。 Select文をFunctionから呼び出し、最終的にはモジュールから呼び出しに 書き換えたいのですが、書き方が良く分かりません。 試したコード --------------------------------------------- Function moji(ByRef katakana As Integer,sento As String) Select Case katakana Case 12450 To 12458 sento = "ア行" Case 12459 To 12468 sento = "カ行" ~(中略)~    Case Else End Select End Function Private Sub コマンド1_Click() Dim kanji As String Dim katakana As Integer Dim sento As String Dim hensuu As String kanji = Me.txt1 katakana = AscW(Left(Me.txt2,1)) sento = moji(katakana) hensuu = sento & "_" & kanji MsgBox hensuu End Sub --------------------------------------------- 多分、大きく間違っているのではないかと思うのですが どのように修正したらよいでしょうか

  • Function 構文のなかに変数をいれたい(VBA)

    お願いします。 エクセルVBAにて 下記のようなFunction構文内に変数を設定する方法を 教えてください。 この中で k以外にも a = Sheets("sheet1").Range("E27") b = Sheets("sheet1").Range("E27") この変数を扱いたいのですが。 もしかして他にもfunction構文が必要でしょうか。 Function data(k As Double) Dim sum As Double Dim ct As Integer Dim keisu As Integer Dim a As Double Dim b As Double a = Sheets("sheet1").Range("E27") b = Sheets("sheet1").Range("E27")  以下 略

専門家に質問してみよう