掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
配列の要素の最大値を指定するには? (ID:118831)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
# 被るのを覚悟の上で回答。 > 1.a(0)なのに,どうしてiに0から3を入れることができるのですか? For〜Nextのループ中で、毎回 ReDim しなおして、 配列のサイズを、一つずつ増やしているからです。 『ReDim a(0)』が実行された直後は、a(0) しか使えません。 『ReDim a(1)』が実行されれば、a(0)とa(1)が指定可能になります。 『ReDim a(2)』であれば、a(0)〜a(2)が指定可能になるわけです。 ただし、「ReDim a(2)」を実行すると、配列のサイズは変更されますが、 既存のデータまでクリアされてしまいます。それを防ぐために、 「ReDim Preserve a(1)」のように、Preserveをつけて処理する事になります。 もっとも、提示されたコードでは「0 から 3まで」という事が明らかなので、 毎回 ReDim Preserve するのではなく、 ReDim a(3) For i = 0 To 3 a(i) = i Next のようにした方が、効率が良いです。 > 2.皆様,かぶるくらい常識なことなのですが,どうしてUBoundに1を足すのでしょうか? 例えば、 ReDim a(2) で宣言された配列は、a(0)〜a(2) までが使えますね。 この配列に対して、新たに a(3) も使えるようにするなら、 ReDim Preserve a(3) のように、上限値に「3」を指定する必要があります。 (ここまでは分かりますよね?) 一方、UBound関数は、添字の最大値を返す関数なので、 ReDim a(2) '←これだと、a(0)〜a(2) しか使えない n = UBound(a) '←この時、n には 2 という値が入る ReDim Preserve a(n + 1) '←これにより、a(3) まで使えるようになる のように処理されます。 そしてこれを、変数 n を使わずにまとめて書くと、 ReDim a(2) ReDim Preserve a(UBound(a) + 1) となりますね。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.