• ベストアンサー

ループ内で変数を配列に入れる

関数からの返り値を、1~X回取得したいと考えています。 Msgboxで表示させると以下のソースでRetに返り値が入ってきます。 それを配列に入れることってできないのでしょうか? *****部分に Array()=Ret とやっても、コンパイルエラーで 「配列には当てはまりません」と出てきます。 for i = 1 to X    ID = ID & i   Ret =Kansu(hiki1,ID)    ******************** next i 返り値を個別に変数として使いたい→配列に入れればいいや ・・・という発想が 間違っているのでしょうか? 文字列を分割してその結果を配列に入れて行く、ということはできるのに もっと単純そうなこれが何故できないのでしょう・・・(涙)。 わかりにくい説明ですみませんが、 どなたかわかる方、教えてください。

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

質問に『1~X』とあり、Xがどのような性質の変数か分からないので、事前に固定されている場合と変動する場合を書いてみました。(VBがないのでExcel2000VBEを使っています) ○固定(配列を10個に特定)   Dim myArray(10) As Long   '配列   Dim i As Integer      'カウンタ   Const x = 10   For i = 1 To x     myArray(i) = myArray(i - 1) + i  '処理例   Next   MsgBox UBound(myArray) & " , " & myArray(x)  '確認 ○変動1(配列が何個必要か分からないが実行の途中で決まる場合)   Dim myArray() As Long   '配列   Dim i As Integer      'カウンタ   Dim x As Integer      'カウンタ   x = 20           '途中で配列の要素数が決まる   ReDim myArray(x)      '再度定義する   For i = 1 To x     myArray(i) = myArray(i - 1) + i  '処理例   Next   MsgBox UBound(myArray) & " , " & myArray(x)  '確認 ○変動2(最初に配列の要素数(この場合は15)を決めておき、必要なら増やす。)   Dim myArray() As Long   '配列   Const intX = 15      '15にしておく   ReDim myArray(intX)    '再定義   Dim i As Integer      'カウンタ   Dim x As Integer      'カウンタ   x = intX - 5 + Int(Rnd() * 10)  '途中で配列の要素数が決まる   For i = 1 To x     If i > intX Then       'intX=15を超えたら再定義。Preserveで15までは変更なし。       ReDim Preserve myArray(i)     End If     myArray(i) = myArray(i - 1) + i  '処理例   Next   ReDim Preserve myArray(x)  '要素数がintXより少なかったら小さくする(必要なら)   MsgBox UBound(myArray) & " , " & myArray(x)  '確認

lovelypooh
質問者

お礼

大変丁寧な回答、ありがとうございます。 Xは関数の返り値で、その都度変わってしまいます。(0~?までの間) 変動2のパターンを使わせていただきました。 動きました~(←当たり前だ)。ありがとうございます。 ReDim Array(X)のタイミングが悪かったみたいです。 また機会がありましたらよろしくお願いします(ペコリ)。

その他の回答 (1)

  • sssohei
  • ベストアンサー率33% (33/98)
回答No.1

Array()=Ret ではなく、Array(i)=Ret です。 何番目(0~)に入れるかを指定します。 あらかじめ、配列を Dim Array(配列の大きさ) As Integer のように宣言しておく必要があります。 文法の解説をしている本や、リファレンスを読んでみてください。

参考URL:
http://www.microsoft.com/japan/developer/library/vbcon98/vbconarrays.htm
lovelypooh
質問者

お礼

早速の回答ありがとうございます。 いろいろ調べてみて、Array(i)=Retも試したんですが、 エラーが出てしまいまして・・・。 配列の大きさはその都度変化するので Dim Array()としておいて あとからReDim Array(x)と宣言しております。 もう少しいろいろ調べてみます。

関連するQ&A

  • [VBS] 動的配列について教えてください!

    VBS初心者です。 以下のように、リストを読み込んで動的配列に持たせたいです。 ----------------------------------------------------------------- GET_FILE = "sample.txt" SET objFs = CreateObject("Scripting.FileSystemObject") ' 動的配列セット Call Array_Set("AryVal",GET_FILE) ' 表示 For i = 0 To Ubound(AryVal) msgbox AryVal(i) Next ' 終了 WScript.Quit 0 Function Array_Set(AryName,ReadFile) Set strVal = objFs.OpenTextFile(ReadFile) ' 1行づつ処理 Do While strVal.AtEndOfStream <> True i = i + 1 ReDim Preserve AryName( i - 1 ) AryName( i - 1 ) = strVal.ReadLine Loop End Function ----------------------------------------------------------------- 見て頂くと分かるとおり、動的配列として持たせたい変数名を Functionの引数として渡しています。(当然のごとくエラー、、、) Functionの引数として渡した値に動的配列が格納される方法があれば教えてください。 よろしくお願いします。

  • ASPのSession変数を配列にしたいのですが。。。

    ASPのSession変数を配列にして使用したいのですが、どのように表記すればいいのでしょうか? Do Until rs.EOF ID=Session("ID(i)") i=i+1 rs.MoveNext Loop という感じに使用したいのですが。。。

  • 配列変数について

    とても基本的なことなのですが <script l anguage = "JavaScript"> week = new Array("日", "月", "火", "水", "木", "金", "土"); hizuke = new Date( ); day = hizuke.getDay( ); document.write("今日の日付 = ", hizuke.getMonth( ) + 1, "月 ", hizuke.getDate( ), "日 ", week[ day ], "曜日" ); </script> このような配列変数ならば、new Date( )によって呼び出された日付に対応して week[ day ]のところが日付に変わることはわかります。 <head> <title> Java </title> <script language = "JavaScript"> function calc( ) { point = new Array( ); point[0] = ei.value * 1; point[1] = su.value * 1 ; point[2] = ko.value * 1; sum = 0; for( i = 0 ; i < 3 ; i ++) { sum += point[i ]; } goukei .val ue = sum; ave = sum / 3; heikin.value = ave; } </script> </head> <body> <hr> <br> 英語 <input type = "text" size = "8" name = "ei "> <br> <br> 数学 <input type = "text" size = "8" name = "su"> <br> <br> 国語 <input type = "text" size = "8" name = "ko"> <br> <br> <hr> <br> <input type = "button" value = "計算" onclick = "calc( )"> <br> <br>3教科合計 <input type = "text" size = "8" name = "goukei "> 点 : 平均点 <input type = "text" size = "8" name = "heikin"> <br> <br> <hr> </body> </html > このような平均点を求めるプログラムでも point = new Array( ); point[0] = ei.value * 1; point[1] = su.value * 1 ; point[2] = ko.value * 1; sum = 0; for( i = 0 ; i < 3 ; i ++) { sum += point[i ]; このように配列変数を使っているのですが、なぜ配列変数をこのように使っているのかが わかりません。 なぜ、平均点を出すときはnew Array( )の( )の中身は何もなくて、上記のような表現を しているのでしょうか? よろしくお願いします。。

  • 配列操作について

    お世話になります。 $obj = array(1 array(id=>111 name=>aaa date=yyyymmdd array(2 array(id=>222 name=>bbb date=yyyymmdd 上記のようなオブジェクト($obj)があるとして この最下層の連想配列データ(id,name,date)を 配列にしたい時は、以下のような書き方で取れると 思いますが、もっとすっきりさせる書き方などありますか? $a = array(); $c = count($obj); for($i=0; $i<$c; $i++){ $a = $obj[$i]['id']; $a = $obj[$i]['name']; $a = $obj[$i]['date']; $i++}

    • ベストアンサー
    • PHP
  • 配列の受け渡し

    こんばんは。 あるページで使用した配列を他のページでも使いたいのですが、 こういう配列を格納した変数の受け渡しって出来るのでしょうか? 普通の変数のデータを受け渡したかったら <input type="hidden" />で直接valueに変数の値を入れれば良いですが、 配列だと自分では以下のように愚直にやる方法しか分かりません。 もっとちゃんと渡せる方法ってあるのでしょうか? <?$a=array(1,2,3,4,5);?> <? for($i=0;$i<count($aaa);$i++){ ?> <input type="hidden" value="<?=$aaa[$i]?>" name="hoge[]"/> <?}?>

    • ベストアンサー
    • PHP
  • 1次元配列のソート方法

    配列のソートメソッドについて質問させていただきます。 VB.NET初心者なので日本語がおかしいかもしれませんが、宜しくお願いいたします。 データテーブルが格納されている配列があり、 その配列をソートしたいと思っています。 データテーブルの中に「NO」と「ID」というフィールドがあります。 NOで昇順し、NOが同じだったらIDの昇順でソートといったことがしたいのですが、 条件によっては上手くいきません。 よろしければ、教えていただけないでしょうか? また、もっと効率の良い方法とかありましたら、具体的はソース等教えていただけないでしょうか? 宜しくお願いいたします。 [例] workDT() ← 元のデータテーブル配列 Dim Datatable(workDt.Rows.Count-1) As DataTable ← ソート後のデータテーブル配列 Dim tmpDatatable(workDT.Rows.Count-1) As DataTable ← 途中で使うデータテーブル配列 Dim NO(workDT.Rows.Count-1) As Integer ← 元のデータテーブル配列の各「NO」フィールドを格納する配列 Dim ID(workDT.Rows.Count-1) As String ← 途中で使うデータテーブル配列の各「ID」フィールドを格納する配列 Dim Index(workDT.Rows.Count-1) As Integer ← インデックスに使用 ' IDでソート For i = 0 To workDt.Length - 1 ID(i) = workDt(i).Rows(0).Item("ID") Index(i) = i Next ' 配列をIDでソート Array.Sort(ID, Index) ' ソート後配列をテンプ配列に格納 For i = 0 To workDt.Length - 1 tmpDatatable(i) = workDt(Index(i)).Copy Next ' NOでソート For i = 0 To tmpDatatable.Length - 1 NO(i) = tmpDatatable(i).Rows(0).Item("NO") Index(i) = i Next ' 配列をNOでソート Array.Sort(NO, Index) ' ソート後配列を格納 For i = 0 To tmpDatatable.Length - 1 Datatable(i) = tmpDatatable(Index(i)).Copy Next これで各配列を初期化します。 workDTに5つのデータテーブルが入っていて workDT(0):ID=3、NO=1 workDT(0):ID=1、NO=5 workDT(0):ID=2、NO=5 workDT(0):ID=4、NO=5 workDT(0):ID=5、NO=7 (IDは重複不可設定、NOは重複可設定です。) とした場合、NOのソートのところで変な順番になってしまいます。 Array.Sort(NO, Index) このメソッドは同じ値だった場合、何を優先してソートしているのでしょうか? 環境はWindowsXPSP3とVB2005です。

  • vb.netって変数宣言、不要ですよね?

    vb.netって変数宣言、不要ですよね? For i = 1 To 10 MsgBox(Str(i)) Next このコードで動いちゃいました。

  • フォームを使った配列変数の受け渡し

    PHP初心者です、よろしくお願いします。 フォームからPHPで配列変数を受け渡すことを考えています。 一次元配列はうまく渡せましたので、これを二次元にしましたところ、 うまく渡せません。基本的なPHPの文法がわかってないので、つまづい ています。多分、配列変数の記述方法がおかしいのだと思うのですが・・。 ご教授よろしくお願いします。 <html> <body> <form method = "POST" action ="test2.php" > <?php //データ渡し側 for ($i = 0 ;$i < 2 ;$i ++){ for ($j=0 ;$j <2;$j ++ ){ echo ("<input type ='text' name = 'data[$i][$j]' size ='10'>\n"); echo ("<br>\n"); } echo ("</tr>\n"); } ?> <input type="submit" name ="sbmit" value="data_input" > </form> </body> </html> <?php //データ受け側 for ($i = 0 ;$i < 2 ;$i ++){ for ($j=0 ;$j < 2;$j ++ ){ $tmp_data[$i][$j] = $_POST["data"][$i][$j]; echo ("$tmp_data[$i][$j] <br>\n"); } } ?> <html> <body> <form method = "POST" action ="test2.php" > <?php for ($i = 0 ;$i < 2 ;$i ++){ for ($j=0 ;$j <2;$j ++ ){ echo ("<input type ='text' name = 'data[$i][$j]' size ='10' value='$tmp_data[$i][$j]'>\n"); echo ("<br>\n"); } } ?> </table> <input type="submit" name ="sbmit" value="in" > </form> </body> </html> 実行結果は、 Array[0] Array[1] Array[0] Array[1] と表示されて、実際の入力した値が反映されません。

    • ベストアンサー
    • PHP
  • PHPの配列要素に別の配列を入れるには?

    とある商品情報を管理するPHPプログラムを書いています。 最終的に、$Paramsの'goodIdArray'という要素に商品情報を2つ入れたいと思っています。 以下の通りに書いてみたんですが、うまくいきません。 $goods_id = array( 'goods_id' => '商品1', 'goods_id2' => '商品2'); $info['goods_id'] = $goods_id;  #$info配列の「goods_id」という要素にgoods_id配列を入れる $goodsIdArray[] = $info['goods_id']['goods_id']; #goodsIdArrayに商品1を入れる $goodsIdArray[] = $info['goods_id']['goods_id2']; #goodsIdArrayに商品2を入れる $Params = array('goodIdArray' => $goodsIdArray) #inParams配列の「goodIdArray」という要素に$goodsIdArray(商品1と商品2)を入れる 無駄に変数を使いまくっているように見えますが、もともとのプログラムが複数のPHPファイルにまたがって動作しているため、変数がこれだけの数になっています。 そもそも、ある配列の要素に別の配列(複数要素をもつもの)は入れられないんでしょうか。 素人の質問でトンチンカンなことを言っているかもしれませんが、ご回答お願いします。

    • 締切済み
    • PHP
  • 多次元配列で、foreachを使って、key値を

    多次元配列で、foreachを使って、key値を入れ替えているのですが、 なんで、こうなるか分かりません。  $x = array();  $x[] = array(   "id" => 1,   "name" => "JavaScript",  );  $x[] = array(   "id" => 5,   "name" => "PHP",  );  $z = array();  foreach($x as $key => $value){   $z[$value["id"]] = $value;   }  print_r($z); 配列のKEYをIDに変更しているのですが、 なんで、こうなるのでしょうか? 特に、  $z[$value["id"]] = $value; が分かりません。 例えば、foerachの途中で、var_dumpすると、 1回目だと、 ◆$key 0 ◆$value Array (  [id] => 1  [name] => JavaScript ) ◆$value["id"] 1 まではいいのですが、 ◆$z[$value["id"]] の値が見れません。 ここはどんな処理をやっているのでしょうか?

    • ベストアンサー
    • PHP

専門家に質問してみよう