インデックスが有効範囲になりませんを解決するには?

解決


ぺっし  2007-01-29 07:18:50  No: 135055

指定した範囲の合計を出すプログラムを作りたいのですが、知識も教科書もないので、困っています。どうかご教授お願いします。

Sub 範囲の合計()

Dim x() As Long
Dim 範囲 As Range
Set 範囲 = Selection
個数 = 範囲.Count

i = 0
For Each セル In 範囲.Cells
    i = i + 1
    x(i) = セル.Value
Next セル

For i = 1 To 個数
    合計 = 合計 + x(i)

Next i
MsgBox "合計= " & 合計

End Sub

これで「インデックスが有効な範囲にありません」と出てしまいます。


モーヲタ  2007-01-29 09:08:35  No: 135056

>これで「インデックスが有効な範囲にありません」と出てしまいます。
Dim x() As Long
と動的配列宣言されているのに領域が確保されてません。
Redimおよび`Preserve等でMSDNを検索してください。

尚、オブジェクト名や変数名に日本語を使うのは避けた方が良いです。
あまり行儀の良いプログラムに見えずらく思われます。


ぺっし  2007-01-29 11:25:59  No: 135057

>モーヲタ様
お返事ありがとう御座います。

ReDimの使い方わかりました。

しかし、
ReDim x(数字)
と入れるのはわかったのですが、
その数字の部分に上限の値を入れなくてはいけないのでしょうか・・・
一応上限を無しにしたいのですが、無理なのでしょうか??


あんび  2007-01-29 18:16:34  No: 135058

モーヲタさんのおっしゃる
ReDim Preserve
について、もう少ししらべてみてください。


ぺっし  2007-01-29 23:37:10  No: 135059

>あんび様
すいません、読んでも全然わかりません。

ReDim Preserve x(2 ^ 31 - 1)
とりあえず次元の最大が2の31乗−1と書いてあったのでこうしました。

ありがとう御座いました。


あんび  2007-01-30 00:26:21  No: 135060

いやいや・・・
最初に最大数を定義するならReDimでいいわけで・・・
Preserveを使うと
Dim x() AS Long

ReDim x(10) as Long

0〜10の内容は保持したまま20までにする必要がでてきた場合
ReDim Preserve x(20) as Long

と書くことでx(10)まではそのままでx(11)〜x(20)も使えるようになる

とわかるはずなんですが・・。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加