- 締切済み
配列でデータが入っている要素を求める方法
dim hairetu(1000,1000) と宣言した後に、 (0,0)から(x,y)までデータを入れるとします。 このときのデータが入っている要素数xとyの値を求めたいのですが、 inboundやUboundだとemptyも含めた要素数を求めることになり使えません。 forを使わない方法があれば教えてください、
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- okormazd
- ベストアンサー率50% (1224/2412)
#1です。 ということで、 Sub test() Dim a(1000, 1000) As Variant, b As Variant 'ここは配列にデータを入れるコード b = a ReDim Preserve b(1000, 0) '1次元にする datanum = WorksheetFunction.CountA(a) '全データ数 dim1 = WorksheetFunction.CountA(b) '第1添え字のデータ数=第1添え字の最大値+1 dim2 = datanum / dim1 - 1 第2添え字の最大値 Debug.Print dim1 - 1, dim2 End Sub というのではどうでしょう。
- chie65536(@chie65535)
- ベストアンサー率44% (8741/19839)
>forを使わない方法があれば教えてください、 そんなモノは存在しません。 配列にデータを入れる時に「何処に入れるか判っている筈」なので、データを入れる際にxとyの最大値を更新するしかありません。 まあ、yだけなら、以下のように「可変長配列」で、どうにかできますが。 ' aryを最小で宣言 Dim ary(1000,1) As Variant ,xMax As Integer xMax = 0 (略) ' ary(x,y)にdataを入れる n = Ubound(ary,2) If y > n Then Redim Preserve ary(1000,y) Endif If x > xMax Then xMax = x Endif ary(x,y) = data (略) 'x,yの最大を求める x = xMax y = Ubound(ary,2) 'yは要素が入っている最大になる まさか「データを入れる際に、どこに入れるか判らない」なんて事はありませんよね?
- okormazd
- ベストアンサー率50% (1224/2412)
「forを使わない方法」 While~Wendを使う。 Do~Loopを使う。 というのでは不満でしょうね。