• ベストアンサー

関数で複数の値を戻り値として返す方法

こんにちは初歩的な質問ですいませんが、VB6.0にて関数を 呼び出して、求めた値を戻り値として返す方法は知ってい ますが、2つ又は3つの値を返したい場合、どうやればよい のでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 ByRefで指定した(通常は省略している)引数に返せばいいと思います。 こんな感じで。 a = 100 b = 10 ret = Keisan(a As Double, b As Double, Tashi As Double, Hiki As Double) MsgBox Tashi MsgBox Hiki ***** プロシージャ部 ***** Public Function Keisan(a As Double, b As Double, resP As Double, resM As Double) As Long   resP = a + b   resM = a - b End Function あとは、戻り値を配列やユーザー定義型にするとか。 それか、グローバル変数を用意しておいて、それを介するとかでしょうか。

ichihachi
質問者

お礼

わざわざソースを記述していただきましてありがとうございます。 大変参考になります。 >それか、グローバル変数を用意しておいて、それを介するとかでしょうか。 先日までそうしていたんですが、グローバル変数のオン パレードになってしまい、変数の数が膨大になりすぎて、 困っていたんですよ。。。 ありがとうございました。

その他の回答 (6)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.7

No.5(及び6)さんへ。 いやいや、こういうのは明示的にあえて記述する方がいいかも知れませんね。

  • Euglena
  • ベストアンサー率62% (5/8)
回答No.6

あ~、ごめんなさい。 参照渡しが既定なんですね。 失礼しましたm(_ _)m

  • Euglena
  • ベストアンサー率62% (5/8)
回答No.5

Public Function Keisan(a As Double, b As Double, resP As Double, resM As Double) As Long  ↓ Public Function Keisan(a As Double, b As Double, ByRef resP As Double, ByRef resM As Double) As Long では?

ichihachi
質問者

お礼

どうもありがとうございます。 指摘した個所が正であれ誤りであれ、質問した私には レスされた方の内容を鵜呑みにしてしまうので、他の方の こういうご好意は大変うれしいです。 ありがとうございました。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.4

No.1のmaruru01です。 ちょっと間違えているので訂正します。 ret = Keisan(a As Double, b As Double, Tashi As Double, Hiki As Double) ↓ ret = Keisan(a, b, Tashi, Hiki) です。

  • r_homma
  • ベストアンサー率50% (2/4)
回答No.3

お疲れ様です。 先々週からVBをはじめた初心者です。(VBではなくプログラムも初心者) 僕も最近知ったのですが、 hogehoge(引数1,引数2,返したい値1,返したい値2)と言った感じで 実際の処理に使う引数のほかに変数を指定してあげると 戻り値のほかに返したい値1,返したい値2にも値を格納→参照できます。 参照渡しとかそういったものらしいです。 詳しくは「参照渡し」で調べてみてくださいね。 詳しい方のフォローお願いします~。

ichihachi
質問者

お礼

どうもありがとうございます。 他の方に教えていただきましたし、検索してみたら 結構出てきました。 おかげでよくわかりました。 ありがとうございました。

回答No.2

関数はVBの中でのお話しでしょうか? VBから呼び出す関数とは? VBの中だけの世界であれば,グローバル変数を設定して,そこに値を入れて参照する。 という方法ではダメなのでしょうか?

ichihachi
質問者

お礼

どうもありがとうございます。 グローバル変数に関しては、数が多くなりすぎたために 質問した次第です。 わざわざすいませんでした。

関連するQ&A

  • recvfrom関数の戻り値について

    初めて質問させて頂きます。 現在、LinuxのUnixドメインを使用した内部通信プログラムを 作成しているのですが、recvfrom関数の戻り値で-512という値が 返ってきて頭を悩ませています。 いろいろなHP等でrecvfrom関数の戻り値について記述されている内容は 受信サイズか-1となっているのですが・・・-512という値については さっぱりでした。 -1の場合は、errnoが入るようなのですが、-512の場合、errnoが0のままで何もはいっていないように見えます。 どの様な問題が発生しているかの見当もつかない状態です。 すみませんが、宜しくお願い致します。

  • 関数のパラメーターと戻り値について

    VB.NET 関数の定義とパラメータの設定と戻り値について質問です。 初心者です。 以下のような戻り値が複数ある関数を定義したいのですが、IN,OUTがよくわからなくて、困っています。DB検索となにか関係があるのでしょうか? 関数名: Fnc パラメータ:Enpno(Char) /IN パラメータ:EnpCD(Char) /OUT パラメータ:EnpNM(Varchar) /OUT 初期値:Enpno = S123 処理内容:DB接続して、Enpnoが一致する場合、戻り値としてEnpCDとEnpNMを返す。DB検索でしようするは,Enpnoのみ。 ByLefで戻り値を2つ返すというようなコードを見たのですが、OUTのときに使えばよいということなのでようか?とどなたか教えてください。 よろしくお願いします。

  • 関数の戻り値に配列は設定できる?

    VB6で関数の戻り値に配列を設定できるのでしょうか?

  • main関数の戻り値

    C言語のmain関数の戻り値はint型ですよね。 私もそういう決まりだと思って守ってきました。 しかし、「mainが戻り値を返すって、どこに返すの?」ということが、私は理解できていません。 私が調べたところでは、「ホスト実行環境」という言葉がこの問題に関係あるようですが、この言葉の意味はよくわからないですし、似た言葉で「ホスト環境」ということばがあるのですが意味も関係もわかりません。 これらは、OSとは違うと思うんですが、自信はありません。 それでも、ない知識を振り絞っていろいろ考えてみると、次のようなことらしいのですが、正しいでしょうか。 ・OSはプログラムの実行に先立ちホスト実行環境を作る。 ・静的記憶域のオブジェクトを初期化するのはホスト実行環境である。 ・関数が、main関数を呼ぶことは可能である。(以下では、main関数が関数から呼ばれる場合は除く。) ・main関数を呼ぶのは、ホスト実行環境が行なう。 ・main関数の中のreturnによってプログラムが終了するのと、exit関数でプログラムが終了することに違いはない。 ・main関数の戻り値は、ホスト実行環境に返される。 ・returnによってホスト実行環境に返される値は、int型である限りなんでもよい。 ・exitによってホスト実行環境に返される値は、int型である限りなんでもよい。 ・必ずexitで値が返されるならば、main関数の中にreturnはなくてもよい。 main関数からの戻り値をどうしようと構わないんだと思うんですが、皆さんの経験の中で、実例としてこういうふうに使われる、というのは何かないのでしょうか。 (ホスト実行環境に値が返される、といっても無視するのでは意味はないと思うのです。 その値の使用例としては、 0が返ってくると「プログラムは正常終了しました。」と表示するとか、0以外の値が返されると別のプログラムが走るとか、 そういうことだと思うんですが。)

  • 関数から戻り値を得る方法について

    知り合いの方から関数の戻り値をえるときにreturn以外に例えば File(&i,&k);←関数呼び出し int File(int **j, double *k)←関数 {      ~      ~ } とやると(double *k)は関数からの出力として、呼び出しているFile(&i,&k)の(&k)に返されると聞きました。しかも、戻り値はint File()のintに依存しないと言われて試してみたのですが、どうもうまくいきません。 正しいやり方知っている方いましたら、教えて下さい。あと複数戻り値を返したいときはどうすればいいんでしょうか?

  • 戻り値と引数

    戻り値と引数の概念がよくわかりません。 質問内容は2つ (1)「戻り値は値を関数元に返す」 とありますが 返すとどうなるのですか? また返さないとどうなるのかを教えて下さい。 (2)引数に関しては眺めていればこの引数が値を渡してるというのは なんとなくわかるのですが、実際のプログラムを組んで関数を作成するときに何を引数にすればいいのかさっぱりです。それを教えて下さい。

  • 複数の関数の中から戻り値の戻し方

    お世話になります。 ActionScript3の戻り値に関するご質問です。 下記ソースのfunc1の処理があり、その中の処理が全て終わった 段階でcompleteイベントを発生させ、 そこで戻り値をblnに戻したいと考えております。 func1の中で戻り値を指定していないので 『関数は値を返しません』というエラーになるのですが、 func1の中にある処理が全て完了した後のCOMPLETEイベントの中から 戻り値を返すにはどのように処理すれば良いでしょうか? お手数ではありますが、宜しくお願いいたします。 var bln:Boolean; bln = func1(); function func1():Boolean {  // 処理(ここには複数の処理がある)  twn.insert(TweenMax.to(contents, 0.7, {autoAlpha:1, ease:Quad.easeOut}));  // 終了後イベント  twn.addEventListener(TweenEvent.COMPLETE, function() {   return false;  }); }

  • 配列を関数の戻り値に使う

    こんばんわ。 PHP5で配列を関数の戻り値として返す方法がわからず今回投稿させていただきました。 配列は1次元で 1,2,3 の値が a という配列に格納されています。 呼び出された関数(testメソッド)で a配列を返し、bで受けようとするのですが、bの値には NULL となっています。 返す際に return $a; としており、 $b=$obj-〉test(); で、aをbで受けようと考えております。 配列を返す場合は普通にretuneで返すだけではダメなのでしょうか。 解決方法がお分りの方がいらっしゃいましたらご教授のほうおねがいします。

    • ベストアンサー
    • PHP
  • Format関数の戻り値

    Format関数で戻り値がおもうようにとれません。 どうしてかわからず困っています。 以下の2パターンの違いがわかりません "0A"はなぜ"00"になってしまうのですか? (VBバージョンは6.0です) format("0D","00") 結果 "0D" format("0A","00") 結果 "00"

  • 戻り値がクラスオブジェクト

    VB初心者でわからないので教えてください。 ある関数を呼び出して戻り値を取得するのですが、その戻り値がクラスオブジェクトとなっています。いろいろ調べてみましたが、いい結果にヒットしなかったので今回質問してみました。 言語はVB6.0です Function 関数A(A as String, B as String) dim C as Class1 set C = new Class1 Class1で宣言された変数に値を入れる処理     関数A = C end Function イメージはこんな感じです。 すみませんが解決策を教えてください。。。。