- ベストアンサー
ループ内で変数を配列に入れる
関数からの返り値を、1~X回取得したいと考えています。 Msgboxで表示させると以下のソースでRetに返り値が入ってきます。 それを配列に入れることってできないのでしょうか? *****部分に Array()=Ret とやっても、コンパイルエラーで 「配列には当てはまりません」と出てきます。 for i = 1 to X ID = ID & i Ret =Kansu(hiki1,ID) ******************** next i 返り値を個別に変数として使いたい→配列に入れればいいや ・・・という発想が 間違っているのでしょうか? 文字列を分割してその結果を配列に入れて行く、ということはできるのに もっと単純そうなこれが何故できないのでしょう・・・(涙)。 わかりにくい説明ですみませんが、 どなたかわかる方、教えてください。
- みんなの回答 (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) '確認
その他の回答 (1)
- sssohei
- ベストアンサー率33% (33/98)
Array()=Ret ではなく、Array(i)=Ret です。 何番目(0~)に入れるかを指定します。 あらかじめ、配列を Dim Array(配列の大きさ) As Integer のように宣言しておく必要があります。 文法の解説をしている本や、リファレンスを読んでみてください。
お礼
早速の回答ありがとうございます。 いろいろ調べてみて、Array(i)=Retも試したんですが、 エラーが出てしまいまして・・・。 配列の大きさはその都度変化するので Dim Array()としておいて あとからReDim Array(x)と宣言しております。 もう少しいろいろ調べてみます。
お礼
大変丁寧な回答、ありがとうございます。 Xは関数の返り値で、その都度変わってしまいます。(0~?までの間) 変動2のパターンを使わせていただきました。 動きました~(←当たり前だ)。ありがとうございます。 ReDim Array(X)のタイミングが悪かったみたいです。 また機会がありましたらよろしくお願いします(ペコリ)。