動的配列の下限の設定の仕方

解決


イチころ  2005-01-14 17:52:39  No: 118914  IP: [192.*.*.*]

こんにちは。いつもお世話になります。

動的配列についてなにか裏技はないかと思い
投稿してみました。
お知恵がありましたら伝授お願いします。

今、開発中のシステムで動的変数をたくさんの個所で使っていて
不便だなぁと思う点があります。

動的変数の下限値を  Option Base 1  にて1から配列を作成しているのですが、

Option Base 1

Dim Data() as String

Redim Data(3,1)



Redim Preserve Data(3,Ubound(Data)+1)

編集 削除
イチころ  2005-01-14 17:57:15  No: 118915  IP: [192.*.*.*]

とすると  下限が1からではなく2からデータが入ることになり
よろしくありません。

かといって、別に変数を作り

Dim i as integer

Dim Data() as String

Redim Data(3,1)

i = 1

Do  Until Flag = True then

   Redim Preserve Data(3,i)
   
   Data(1,Ubound(Data,2))=a

Data(1,Ubound(Data,2))=a





loop

編集 削除
イチころ  2005-01-14 18:09:17  No: 118916  IP: [192.*.*.*]

すいません。
2度も誤送信してしまいました(−−。


↓見直し後、訂正してもう一度載せます。


とすると  配列のインデックスが2からデータが入ることになり
使用上好ましくありません。

かといって、別に変数を作り

Dim i as integer

Dim Data() as String

Redim Data(3,1)

i = 0

Do  Until Flag = True then

   i = i +1  

   Redim Preserve Data(3,i)
   
   Data(1,Ubound(Data,2)) = a

   Data(2,Ubound(Data,2)) = b

   Data(3,Ubound(Data,2)) = c

Loop

Option Base 1  を  使わずに動的配列を使っても同じ事になるとおもうので
すが、皆様はどのように回避しているのでしょうか?

配列の上限に格納したあとに  動的変数の上限を1上げたり
その前に条件を満たしたら  Exit Doすればよい話ですが
仕様としてそれは使いたくありません。

なにかよい案ありませんか?

編集 削除
じゃんぬねっと  URL  2005-01-14 18:31:18  No: 118917  IP: [192.*.*.*]

> 皆様はどのように回避しているのでしょうか?
そもそも、多次元配列を使わず多段階配列を使ってます。

編集 削除
イチころ  2005-01-17 08:09:31  No: 118918  IP: [192.*.*.*]

多段階配列は.Netのみでしたよね?
当方の環境は6.0です。


仕方ないので
このままの仕様でいきます。
ご回答ありがとうございました。

編集 削除
Dental  2005-01-17 09:01:21  No: 118919  IP: [192.*.*.*]

VB6 - [他の配列を含む配列]
http://www.microsoft.com/japan/developer/library/VBCon98/vbconarrays.htm

編集 削除
じゃんぬねっと  URL  2005-01-17 09:07:11  No: 118920  IP: [192.*.*.*]

> 多段階配列は.Netのみでしたよね?

勝手に自己解決せず Type を使いましょう :)

編集 削除
イチころ  2005-01-17 14:43:50  No: 118921  IP: [192.*.*.*]

お返事ありがとうございます。
    
    構造体の配列を使っている個所もありますが、項目数が数えるくらいの場合
    のみ使用しています。
    
    今回の質問は、ループ数が限られていない処理での動的配列の下限インデックスを
    他の変数を用いずに、1から始まる配列を作成できたら分かりやすくて便利なのに〜
    というものぐさな質問なので、こんな質問にご回答していただきありがとうございました。
    
    
      >Dim arrX(2) As Variant ' 要素が 2 つのバリアント型の配列を宣言します。
      >arrX(1) = countersA()  ’各要素に別の配列を代入します。
      >arrX(2) = countersB()
      >MsgBox arrX(1)(2)      ' 各配列の要素を表示します。
      >MsgBox arrX(2)(3)

    このコードは初心者なので分かりませんでした(−−。
    勉強が必要ですね。がんばります。ありがとうございました。

編集 削除