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

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


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

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

わかりにくい説明ですみませんが、
どなたかわかる方、教えてください。

A 回答 (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)  '確認
    • good
    • 0
この回答へのお礼

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

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

また機会がありましたらよろしくお願いします(ペコリ)。

お礼日時:2002/02/04 10:13

Array()=Ret ではなく、Array(i)=Ret です。


何番目(0~)に入れるかを指定します。

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

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

参考URL:http://www.microsoft.com/japan/developer/library …
    • good
    • 0
この回答へのお礼

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

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

もう少しいろいろ調べてみます。

お礼日時:2002/02/04 09:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ