• ベストアンサー

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

関数からの返り値を、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

専門家に質問してみよう