• ベストアンサー

Functionの戻り値を2次元配列にする方法

VB.NETを使いはじめた初心者です。 Functionの戻り値を2次元配列にして データを取得したいのですが、 「Doubleの1次元配列はDoubleから派生していないためDoubleの1次元配列の1次元配列の値をDoubleの2次元配列に変換できません」とエラーがでます。 どのように変更すればよいでしょうか。 ご教授願います。 Function f1 As Double()() Dim temp(2,3) As Double ・・・・・ Return temp End Function

  • Tyo8
  • お礼率40% (4/10)

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

  • ベストアンサー
  • JeanneNet
  • ベストアンサー率48% (100/208)
回答No.2

こんにちは、じゃんぬねっと です。 っていうか、多次元配列と多段階配列は違いますよ。 > Return temp は、f1()() == temp(,) とやっているのと同じです。

Tyo8
質問者

お礼

Function f1 As Double()()の Double()()をDouble(,)にしたら解決しました。 どうもありがとうございました。

その他の回答 (1)

  • ppg-2
  • ベストアンサー率39% (77/193)
回答No.1

戻り値を上位ビットと下位ビットにわけてコール側でそれを意識した判定をさせる方法が一般的でしょう。 また、ユーザ定義型を戻り値にすることもできるでしょう。

Tyo8
質問者

お礼

さっそくのお返事ありがとうございます。 無事解決することができました。

関連するQ&A

  • 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の戻り値を配列にしたいのですが

    vbを始めたばかりですがよろしくお願いします。 Functionの戻り値を配列にしたいのですが Function fnc(ByVal a As Byte, ByVal b As Byte) As Integer() fnc(0) = a + b fnc(1) = a - b End Function というような使い方はできないのでしょうか? 一つのFunctionで二つの計算結果をかえすには どうしたらよいのでしょうか? お願いします。

  • 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

  • 配列をDLLの戻り値としてVBAで受け取る書き方

    vbdll.dll: int * __stdcall arr() { int a[] = {1,2,3}; return a; } vba: Declare Function arr Lib "C:\temp\vbdll.dll" () As Long() Sub test() Dim ccc() As Long ccc = arr Debug.Print ccc(0) End Sub インデックスが有効範囲にありませんになります 配列をDLLの戻り値としてVBAで受け取る書き方を教えてください? 何卒、ご教授お願いします。

  • 2次元配列を戻り値とする関数?

    いつもお世話になっています。 角度を入力すると、 2×2の2次元配列を戻す 関数を作りたいのですが、 コンパイルすると、 戻り値の型のところで、 不正な変換だというエラーが出て うまく行きません。 参考書を何度も読み直して 戻り値の型をポインタのポインタにするなど、 いろいろトライしてみたのですが、うまく行きません。 typedef を使う方法も考えましたが、 他にもっとすっきりする方法はないでしょうか? どなたか参考URLをお教えくださるか、 解決策を教えてください。 よろしくお願いします。 ちなみに、この関数は大凡下記の通りです。 double** Matrix(double sita) { double mat[2][2]; mat[0][0]= cos(sita); mat[0][1]= sin(sita); mat[1][0]=-sin(sita); mat[1][1]= cos(sita); return mat; }

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

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

  • VB functionについて

    プログラム初心者です。 以下のソースをVB2010で動作させると型'double'の値を'system.Collections.ArrayList'に変換できません。となります。呼び出し方法がおかしいと思うのですが。よく分かりません。解決方法を教えてくださいお願い致します。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim aArr() As Double aArr(1) = 1.1 aArr(2) = 2.3 MsgBox(AAA(aArr)) End Sub Public Function AAA(ByVal aArr As ArrayList) As Double() Dim retVal As Double() = Nothing ReDim retVal(2) Dim loopCnt As Integer = 0 Dim Arrcnt As Integer = aArr.Count Dim sum As Double = 0.0 For loopCnt = 0 To Arrcnt - 1 sum += aArr(loopCnt) Next sum = sum / loopCnt retVal(0) = sum Return retVal End Function

  • 3次元配列の記述

    VB6.0を使っています。 2次元配列は以下の様になりますが、3次元配列はどう記述すればいいのでしょうか? Dim phrase(1) As Variant phrase(0) = Array("0-0", "0-1", "0-2") phrase(1) = Array("1-0", "1-1", "1-2")

  • 2次元配列を返す関数について

    VB6でExcelのMMULTのような関数が欲しかったので作って見ました。 関数内で配列をRedimで確保して戻り値として返すのですが、このような方法でメモリーリークなど発生する心配はないでしょうか? '行列の掛け算 Public Function mtxMult(ByRef mx1() As Double, ByRef mx2() As Double) As Double() Dim r, c, i, r1, c1, r2, c2 Dim res() As Double '行と列の最大値を得る r1 = UBound(mx1, 1) c1 = UBound(mx1, 2) r2 = UBound(mx2, 1) c2 = UBound(mx2, 2) If c1 <> r2 Then Exit Function ReDim res(0 To r1, 0 To c2) '答えの配列を確保 '各要素を掛ける For r = 0 To r1 For c = 0 To c2 res(r, c) = 0 For i = 0 To c1 res(r, c) = res(r, c) + mx1(r, i) * mx2(i, c) Next i Next c Next r mtxMult = res End Function '動作確認 Private Sub Command1_Click() Dim mx1(0 To 1, 0 To 1) As Double Dim mx2(0 To 1, 0 To 1) As Double Dim res() As Double Dim r As Integer List1.Clear mx1(0, 0) = 1 mx1(0, 1) = 2 mx1(1, 0) = 3 mx1(1, 1) = 4 mx2(0, 0) = 5 mx2(0, 1) = 6 mx2(1, 0) = 7 mx2(1, 1) = 8 res = mmult(mx1, mx2) For r = 0 To 1 List1.AddItem res(r, 0) & " , " & res(r, 1) Next r End Sub ところで、質問のソースコードのインデントを保持する方法はないでしょうか?

  • Function プロシージャの戻り値にバグ?

    いつも拝見させていただいてます。 今回Excel VBAでタイムスケジュールを作成したところ、まったくわけのわからないエラーが発生してしまい途方に暮れており、皆様のお力をお借りしたく投稿させていただきます。 エラーの内容は簡単に言うと Function プロシージャの戻り値がなくなってしまう(0になっている)ことです。 ESC = ESColumn(EventStart) ---------------------------------- Function ESColumn(TimecoluConv As Date) As Integer Select Case TimecoluConv Case "8:00:00" ESColumn = 2 Case "8:10:00" ESColumn = 3 Case "8:20:00" ESColumn = 4 ・・・ End Select End Function と、このようなコードで入力された時間を数値に変換しているのですが、 繰り返し処理をしているといきなり戻り値が0になってしまいます。 今回は8:00を6回取得した後、8:10を変換しようとしたら戻り値が0になっていました。 戻り値を使用して、セルを選択するため、そのタイミングでエラーになります。 なぜ繰り返し処理の途中で発生するのでしょうか。 解説と対策をご教示していただけると大変助かります。 よろしくお願いします。