• ベストアンサー

動的配列に値を返す関数

Split関数のように動的配列に値を返す関数を作成しようとしているのですが、 作り方が全くわからず途方に暮れています。 Function 関数名()(引数1,引数2) などと関数名の後に()を付けたりしてみたのですが、 コーディング時にエラーとなってしまいます。 何か良い方法はないでしょうか?

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

  • ベストアンサー
  • don_cha
  • ベストアンサー率34% (139/407)
回答No.1

動的配列を戻り値とする関数の形式は以下のような形です。 Function 関数名(引数1,引数2) As 戻り値型() 例)文字列を1文字ずつに分解して配列にして返す Function ExFunc(DatBuf As String) As String() Dim ii As Integer ReDim RetBuf(Len(DatBuf) - 1) As String For ii = 1 To Len(DatBuf) RetBuf(ii - 1) = Mid(DatBuf, ii, 1) Next ExFunc = RetBuf End Function

k_o_j_i
質問者

お礼

早速回答いただきありがとうございます。 >Function ExFunc(DatBuf As String) As String() 戻り値型の後ろに付けるのですね(惜しかった…?) 助かりました

関連するQ&A

  • 配列ポインタの関数中のメモリ領域

    C初心者です。 関数中で配列ポインタを宣言する場合についての質問です。 たとえばDouble型の2次元のローカルな配列ポインタを用いる場合、 その配列要素数が100である場合は void 関数名(引数1,引数2,...){ int i; double *a[2]; for(i=0;i<2;i++){ a[i] = (double*)malloc(100*sizeof(double)); } for(i=0;i<2;i++){ free(a[i]); } } またこの値を引数1とする場合、引数1をoutとすると void 関数名(double *out,....) とし、 for(i=0;i<2;i++){ out[i] = a[i]; } とすればよいのでしょうか? もしこれがあっているとすると、つぎのような現象で困っています。 配列要素数を50000個ぐらいとし、複数の関数で、同様に mallocを用いて、配列ポインタのローカルでメモリ領域を確保しようとした場合、コンパイルは成功するのですが、その後実行すると、エラーが発生したというメッセージとともにコマンドウィンドが強制終了します。 コンパイラはVisual C++ EXpress Edition 2008です。 データサイズを小さくすると、エラーは起きません。 malloc関数で確保するメモリサイズは、関数の入力引数で定義された変数を用いて計算しており、データサイズに応じて変更されます。 よろしくお願いいたします。

  • 関数とarguments配列

    ●質問の主旨 下記サイト、CodeStudyによる JavaScriptの関数とarguments配列の 使い方に関する問題に対する 答えとなるコードの記述が分かりません。 どなたかアドバイスをお願いします。 CodeStudy 関数その2 3.arguments その3 http://jeek.jp/study/section18/3 ●問題文 関数checkが定義されています。 check内のif文により、引数が3つ以外の際は、 outputで"引数が3つではありません。"と出力させましょう。 function check(x, y, z) { if() { output("引数が3つではありません。"); } } check(1, 2, 3, 4); ●自分で作った途中経過 resultやreturnの使い方がよく分かりません。 function check(x, y, z) {  var result = 0; if(arguments.length !== 3) { output("引数が3つではありません。"); } return result; } check(1, 2, 3, 4); output(check); ●コードの条件(ヒント) argumentsは、引数を格納する配列で、 argumentsを使うと引数をいくつでもとることが出来ます。 また、argumentsは配列なので、 .lengthを使うと長さが求められます。

  • C言語 関数プロトタイプ宣言の引数に配列を入れたいのですが

    関数プロトタイプ宣言(自作関数)の引数に、A[4][4]というような配列を入れたいのですが、コンパイル時にエラーでincompatibleといわれてしまいます。 A[0][0]からA[3][3]までを個別に引数に指定してもエラーになります。 良い方法は無いでしょうか?

  • 連想配列からの値の取り出し

    お世話様です。 タイトルにもありますが連想配列を作成した後(以下に記述例)に その配列からキーを指定して値を取得したいと思っております。 array_keys関数だと値を指定してキーを取得するみたいで うまくいきませんでした。 何かよい方法ありませんでしょうか? //配列に格納 while (条件) {   $aParaOra += array((キー) => (値)); }

    • ベストアンサー
    • PHP
  • 関数で配列を返す方法

    ユーザー関数で、値を返す方法はしっています。 return 変数名; では配列を返す場合はどうすればよいのでしょうか?

  • Perlで配列に設定した値が関数に引き継がれない。

    レンタルサーバ上でPerlのプログラムを作成しているの ですが、動作でよくわからないことがあるので、教えてください。 Perlのプログラムがあるサーバで動作していて、それを 他のサーバに移したのですが、正しく動作しなくなりました。 調べてみると、関数を呼んでいるところで配列の値がうまく 引き継がれていませんでした。 呼び出しの処理は次の通りです。 ●呼び出し元 ret= &SubModule(*DATA1); ●呼び出し先 sub SubModule { local(*DATA1) = @_ if @_; while(($key, $value) = each(%DATA1)) { #配列に対する処理 } #以下省略 このような処理の時に呼び出し元では配列DATA1に 値が入っているのに呼び出し先のSubModuleでは 空になりwhile文を素通りして「#配列に対する処理」 を実行しません。 いろいろ試しているうちに、呼び出し先に1つ余計な whileを入れると配列DATA1に値が入ってきました。 つまり次のように変更すると、うまくいきました。 呼び出し先 sub SubModule { local(*DATA1) = @_ if @_; while(($key, $value) = each(%DATA1)) { } while(($key, $value) = each(%DATA1)) { #配列に対する処理 } #以下省略 こうすると 「#配列に対する処理」が実行されました。 教えていただきたいのは以下の2点です。 (1)元のサーバでは問題なく動作していたのですが、  別のサーバでは、配列の引数がうまく引き継がれ  なくなりました。どういう原因が考えられるでしょうか。  処理上何かまずいところがあるのでしょうか。 (2)呼び出し先でwhile文を一つ入れることで、配列の  値が参照できるようになったのですが、これは  なぜでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • ExcelVBA ユーザ定義関数と定数配列

    2010以降のExcelVBAです ユーザー定義関数として使うfunction 此の引数として 幾つかの項に配列数式、又は定数配列を与えたいのです が、 此の際の 引数の受け方と処理の仕方 此が判りません 例を交え お教え願えないでしょうか? 宜しくお願い致します。

  • MATLABの関数で配列の要素を返す方法

    現在MATLABについて勉強しているのですが、関数(function)を用いて配列の値を返す方法が分からず困っています。 関数で定義した配列A(m行n列)を用いて、メイン関数で配列の要素Aijを呼び出す、ということがしたいのです。 function y=Func(x)等で1変数や他変数の入出力の仕方は分かります。 どなたか初心者でも理解できるようご教授お願い致します。

  • 返り値の配列中の1つの値のみ受け取りたい。

    関数で、例えば配列型を返す関数oshiete()があるとします。 これを個別の関数に割り当てる場合は以下のようになります。 list($var1, $var2, $var3) = oshiete(); あるいは $vars = oshiete(); $var1 = $vars[0]; $var2 = $vars[1]; $var3 = $vars[2]; もし返ってくる配列中の値のうち、1つだけ取り出したい場合は以下のようになります。 $var1 = oshiete(); $var1 = $var1[0]; しかし、ここで2行書くのが無駄に思えて仕方がありません。 1行目の「$arr = 」に続けて、関数oshiete()の値を1つだけ取り出す方法って無いのでしょうか?「$arr = oshiete()[0];」のような書き方は駄目でした。 あと、もし2行で書く方法し無い場合、関数oshiete()が1つの値を取り出すことだけが目的で、かつそれ以降使うことが無い場合、配列を一旦変数$var1に入れて次にその変数に上書きする形で値を代入する方法は、メモリ消費量などの観点から見ると有用でしょうか?他で使わないなら別の変数名を容易するのは無駄に思えます。

    • 締切済み
    • PHP
  • VBのFunctionで、配列を引数や返却値にできますか?

    配列の要素をソートするFunction を作成しようとしているのですが、 ソート対象配列を引数にして、返却値がソートされた配列になるように したいと思ったのですが、その方法がわかりません。 それとも、引数に配列を入れることは不可能なのでしょうか。