
No.3ベストアンサー
- 回答日時:
ごめんごめん。
(1)は、書き間違えただけ。Redim a(255, 255, 255): Redim b(255, 255, 255)
(1),(2)ともに、Variant型変数の中には配列を格納できるってだけの話です。ややこしくなるので、あまりオススメはしませんが。
まぁ、試してみてください。
No.2
- 回答日時:
>> 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のみコピーとかはどーしてもムリ。
素直にループしても数秒なので、処理の工夫でコピー頻度を減らした方が良いと思います。
ありがとうございます。
forループでの書き方は分かっているので、一つ目の方法をもう少し教えていただけないでしょうか?
Redim a(255, 255)
Redim b(255, 255)
で二次元配列に設定しておいて、
a(1,1,1) = 1
を代入しようとしても3次元目は配列がセットできていないのではないでしょうか?
更に
b = a 'aの中身を全コピ
c = a 'aの中身を全コピ
で配列をコピーしようとしても
cは配列がセットできていないのではないでしょうか?
No.1
- 回答日時:
ループくらいは使いこなせるようになりたいですね。
。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に全コピーあるいは、任意のデータ列だけコピーする方法があれば教えてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
配列に同じ値を入れる方法
Excel(エクセル)
-
配列でデータが入っている要素を求める方法
Visual Basic(VBA)
-
動的配列が存在(要素が有る)か否かを判定できますか?
Visual Basic(VBA)
-
-
4
VBA ユーザーフォームのChangeイベントを停止したい
Access(アクセス)
-
5
エクセルVBAで配列内に空白データを入れる場合
その他(Microsoft Office)
-
6
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
-
7
subの配列引数をoptionalで使う方法
Visual Basic(VBA)
-
8
エクセルVBA 配列からセルに「関数式」を一気代入したい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
配列数式の解除
-
VBA 1次元配列を2次元に追加する
-
【excel VBA】 配列番地の検索
-
Array配列の末尾に追加したい。
-
配列内の内容を全て表示する方法
-
AES暗号にて、AES_set_encrypt_...
-
ListViewで、非表示列って作れ...
-
delphiで配列を、コピーするには。
-
subの配列引数をoptionalで使う...
-
Dim は何の略ですか?
-
特定のセル範囲で4文字以上入力...
-
OutlookVBAでサブフォルダ一括作成
-
2次元動的配列の第一引数のみを...
-
VLOOKUP関数で、一番下...
-
for each の現在の配列ポインタ...
-
特定のPCだけ動作しないVBAマク...
-
教えて下さい
-
エクセルで特定の列が0表示の場...
-
String""から型'Double'への変...
-
UserForm1.Showでエラーになり...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
配列数式の解除
-
特定のセル範囲で4文字以上入力...
-
ListViewで、非表示列って作れ...
-
2つ以上の変数を比較して最大数...
-
VBA 1次元配列を2次元に追加する
-
VBA Match関数の限界
-
配列変数の添字が範囲外ですと...
-
subの配列引数をoptionalで使う...
-
VB6 配列を初期化したい
-
【VBA】配列とWorksheetFunctio...
-
2次元動的配列の第一引数のみを...
-
エクセルVBAの配列二重ループ処...
-
VBAで近似曲線の係数取得
-
エクセルで最小値から0を除く方法
-
delphiで配列を、コピーするには。
-
Excel 2019 のヘルプの印刷
-
MATLABにて場合分け関数を定義...
-
個数が1以上の行を個数分行コ...
-
Dim は何の略ですか?
-
VBのFunctionで、配列を引数...
おすすめ情報