OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • 困ってます
  • 質問No.210421
  • 閲覧数163
  • ありがとう数3
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 76% (55/72)

関数からの返り値を、1~X回取得したいと考えています。
Msgboxで表示させると以下のソースでRetに返り値が入ってきます。
それを配列に入れることってできないのでしょうか?
*****部分に Array()=Ret とやっても、コンパイルエラーで
「配列には当てはまりません」と出てきます。

for i = 1 to X
   ID = ID & i
  Ret =Kansu(hiki1,ID)
   ********************
next i


返り値を個別に変数として使いたい→配列に入れればいいや ・・・という発想が
間違っているのでしょうか?

文字列を分割してその結果を配列に入れて行く、ということはできるのに
もっと単純そうなこれが何故できないのでしょう・・・(涙)。

わかりにくい説明ですみませんが、
どなたかわかる方、教えてください。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2
レベル13

ベストアンサー率 68% (791/1163)

質問に『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

お礼率 76% (55/72)

大変丁寧な回答、ありがとうございます。
Xは関数の返り値で、その都度変わってしまいます。(0~?までの間)
変動2のパターンを使わせていただきました。

動きました~(←当たり前だ)。ありがとうございます。
ReDim Array(X)のタイミングが悪かったみたいです。

また機会がありましたらよろしくお願いします(ペコリ)。
投稿日時 - 2002-02-04 10:13:02
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル9

ベストアンサー率 33% (33/98)

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

あらかじめ、配列を
Dim Array(配列の大きさ) As Integer
のように宣言しておく必要があります。

文法の解説をしている本や、リファレンスを読んでみてください。
お礼コメント
lovelypooh

お礼率 76% (55/72)

早速の回答ありがとうございます。
いろいろ調べてみて、Array(i)=Retも試したんですが、
エラーが出てしまいまして・・・。

配列の大きさはその都度変化するので
Dim Array()としておいて
あとからReDim Array(x)と宣言しております。

もう少しいろいろ調べてみます。
投稿日時 - 2002-02-04 09:30:57


このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ