- ベストアンサー
配列を任意の数値で埋める方法
VBAを使っていて dim a(256, 256, 256) といった配列を作って、ゼロとか一とか任意の数値で埋めたいのですが forループで代入していく方法はありますか? あるいは、既に数値が入ってある配列をリセットとして空の状態にする簡単な方法ってありますか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ごめんごめん。(1)は、書き間違えただけ。 Redim a(255, 255, 255): Redim b(255, 255, 255) (1),(2)ともに、Variant型変数の中には配列を格納できるってだけの話です。ややこしくなるので、あまりオススメはしませんが。 まぁ、試してみてください。
その他の回答 (2)
- ap_2
- ベストアンサー率64% (70/109)
>> ANo.1の補足 VBAは配列操作弱いので、ループ使わないと厳しいです。 かなり強引になりますが・・・ (1) 全コピは、動的配列にすれば可能 Dim a, b, c Redim a(255, 255) Redim b(255, 255) a(1,1,1) = 1 b = a 'aの中身を全コピ c = a 'aの中身を全コピ 変数の中に配列が入った2重構造のイメージ。a,bはVariant型なので代入が効きます。Redimし直せば値クリア。 (2) 部分コピーは、配列を入れ子にすることで・・・ Dim a(255, 255), b(255, 255), z Redim z(255) for i = 0 to 255 for j = 0 to 255 a(i, j) = z b(i, j) = z next next a(1, 1)(1) = 1 b(1, 1) = a(1, 1) '1,1,n列のみコピー 部分コピーはできませんが、入れ子にすれば、代入になります。 (1),(2)の組み合わせで、ある程度は誤魔化しがききます。ただ、無駄に複雑ですし、添え字1~100のみコピーとかはどーしてもムリ。 素直にループしても数秒なので、処理の工夫でコピー頻度を減らした方が良いと思います。
- ap_2
- ベストアンサー率64% (70/109)
ループくらいは使いこなせるようになりたいですね。。 For i = 0 to 256 For j = 0 to 256 For k = 0 to 256 a(i, j, k) = 0 Next Next Next 配列や変数は、Eraseで初期値に戻せます。 Dim a(256,256,256) 'Variant型:初期値Empty a(1, 1, 1) = 1 Erase a '全部Emptyにもどる 動的配列の場合、Eraseで要素数(Redim)ごと初期化されるので注意してください。 初期値は、データ型によって異なります。初期値は、Variant型(型指定なし)ならEmpty、数値型なら0、文字列なら""。Emptyは0や""と同じ扱いができるので、あまり意識しなくて良いですが。 任意の値を入れるならループ。クリアだけならEraseでどうぞ。
お礼
ありがとうございます。 それと Dim a(256,256,256) Dim b(256,256,256) として、ループを使わずに 配列aをbに全コピーあるいは、任意のデータ列だけコピーする方法があれば教えてください。
お礼
ありがとうございます。 forループでの書き方は分かっているので、一つ目の方法をもう少し教えていただけないでしょうか? Redim a(255, 255) Redim b(255, 255) で二次元配列に設定しておいて、 a(1,1,1) = 1 を代入しようとしても3次元目は配列がセットできていないのではないでしょうか? 更に b = a 'aの中身を全コピ c = a 'aの中身を全コピ で配列をコピーしようとしても cは配列がセットできていないのではないでしょうか?