指定した範囲の合計を出すプログラムを作りたいのですが、知識も教科書もないので、困っています。どうかご教授お願いします。
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
これで「インデックスが有効な範囲にありません」と出てしまいます。
>これで「インデックスが有効な範囲にありません」と出てしまいます。
Dim x() As Long
と動的配列宣言されているのに領域が確保されてません。
Redimおよび`Preserve等でMSDNを検索してください。
尚、オブジェクト名や変数名に日本語を使うのは避けた方が良いです。
あまり行儀の良いプログラムに見えずらく思われます。
>モーヲタ様
お返事ありがとう御座います。
ReDimの使い方わかりました。
しかし、
ReDim x(数字)
と入れるのはわかったのですが、
その数字の部分に上限の値を入れなくてはいけないのでしょうか・・・
一応上限を無しにしたいのですが、無理なのでしょうか??
モーヲタさんのおっしゃる
ReDim Preserve
について、もう少ししらべてみてください。
>あんび様
すいません、読んでも全然わかりません。
ReDim Preserve x(2 ^ 31 - 1)
とりあえず次元の最大が2の31乗−1と書いてあったのでこうしました。
ありがとう御座いました。
いやいや・・・
最初に最大数を定義するなら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)も使えるようになる
とわかるはずなんですが・・。
ツイート | ![]() |