【初月無料キャンペーン中】gooドクター

dim hairetu(1000,1000)

と宣言した後に、

(0,0)から(x,y)までデータを入れるとします。

このときのデータが入っている要素数xとyの値を求めたいのですが、
inboundやUboundだとemptyも含めた要素数を求めることになり使えません。


forを使わない方法があれば教えてください、

gooドクター

A 回答 (3件)

#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

というのではどうでしょう。
    • good
    • 1

>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は要素が入っている最大になる

まさか「データを入れる際に、どこに入れるか判らない」なんて事はありませんよね?
    • good
    • 0

「forを使わない方法」



While~Wendを使う。
Do~Loopを使う。

というのでは不満でしょうね。
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング