dポイントプレゼントキャンペーン実施中!

配列をリサイズする

こんにちは。
エクセル2003で配列をリサイズすることはできますでしょうか。一個一個、新たに配列に入れなおすと大変なので、もしあれば教えて下さい。

たとえば

a(1,1)=1
a(2,1)=2
a(3,1)=3
a(4,1)=4

となっているところで、

b(1,1)=a(2,1)
b(1,2)=a(3,1)

と一度にしたいのです。
よろしくお願いします。
--
エクセル2003

A 回答 (5件)

http://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub0 …
に在る記事と
http://officetanaka.net/excel/vba/speed/s11.htm
の記事から
Sub TEST8()
Dim S2 As Worksheet
Dim A(1 To 3, 1 To 4) As String ' 3×4の2次元配列
Dim B(1 To 3, 1 To 4) As String
Set S2 = Worksheets("Sheet2")
' 2次元配列に値をセット(1つずつ原始的に!)
A(1, 1) = "A1"
A(1, 2) = "B1"
A(1, 3) = "C1"
A(1, 4) = "D1"
A(2, 1) = "A2"
A(2, 2) = "B2"
A(2, 3) = "C2"
A(2, 4) = "D2"
A(3, 1) = "A3"
A(3, 2) = "B3"
A(3, 3) = "C3"
A(3, 4) = "D3"
' 配列を一気にセル範囲に転記
S2.Cells(1, 1).Resize(3, 4).Value = A
GoTo p1
'B = Range("A2:D3")
For i = 1 To 2
For j = 1 To 4
MsgBox B(i, j)
Next j
Next i
p1:
'--

Dim C As Variant
C = Range("A2:D3")

Range("H1:K2") = C

End Sub
を作ってやってみると
A1:D3
A1B1C1D1
A2B2C2D2
A3B3C3D3

H1:K2に
A2B2C2D2
A3B3C3D3
ーーーー
・これが質問者のニーズにあっているか
・合っていたとして、百万行などのオーダーで速度的に実行可能か
・ForNextに対してこちらが有利か
プログラムコーディング上は簡単(少数行)になっても実行で有利や可能とは別。
・システム制限に引っかから無いか
考えてください。
上記WEBで田中先生の文章の
>1,000,000個のデータにアクセスして1秒~2秒なのですから、・・
を参照してください。
ーー
上記で'B = Range("A2:D3")
は予想通り不可です。
A配列=B配列のコードが書ける言語・処理系とダメな言語(繰り返しで全要素を代入必要)があると思う。
エクセルVBAでは、セルの数がそこそこなら、シートは2次元配列的なので、配列にわざわざ落とす経験はあまりしてないので、じゅうぶんな自信はないが参考に。
多数セルに書き込む処理があればScreenUpdating=False(True)を入れてください。
    • good
    • 0

質問の内容がちょっと把握できていないのですが「2次元配列の行と列の入れ替え」


ということでしたらhttp://officetanaka.net/excel/vba/tips/tips124.htmは参考になりませんか?
元の配列の値がどこからくるのか(csvなどのファイル、シート、DB)によりますけど
バリアント型の変数に配列を入れることが出来ればシートを経由しても結構早いと思います。
    • good
    • 0

VBAで配列のリサイズは可能ですが制限があります


A(3,5)といった配列の場合 ,5の最も右側にある次元のみ変更可能です
ただしこの場合でも 最低の添え字の変更は不可能です

Dim A()
と宣言
ReDim A(3,5)
を実行すれば A(0,0)から A(3,5)までの24要素になります

ReDim A(3,2) とすれば A(0,0)から A(3,2)の12要素に変更できます
この場合には Aの中身はクリアされます

クリアさせないためには Preserve をつけて実行します
ReDim preserve A(3,2)
といった具合です
    • good
    • 0

#1です。


うーん。私がfor文のやり方しか思いつかないので、
(しかも確実なので)、
私だったらそれでやっちゃいます。

for文では駄目なのですか?
かなり短いコーディングな気がするのですが…
    • good
    • 0
この回答へのお礼

ありがとうございます。
for文でやった場合、100万回ほど回さないといけないため、配列の入れかえ?が一度にすめば、1万回ほどに計算が減るかなと。
他に良いやり方をご存知の方がいれば引き続きよろしくお願いします。

お礼日時:2010/06/30 01:15

1.リサイズってことは配列数を変えたいって事ですか?



2.それとも配列の値を入れ替えたいってことでしょうか?


1ならRedim宣言
2なら規則性があるならFor文とかで入れ替えるとかですかね。
    • good
    • 0
この回答へのお礼

ありがとうございます。
分かりづらい説明ですいません。
配列aを配列bに入れたいのです。配列bは配列aの列の一部だけです。
例えば、配列aの2行1列から5行1列までの4つのデータを配列bの1行1列から4行1列までに代入したいのです。for分で1個ずつ入れていくしかないんですかね。

お礼日時:2010/06/30 00:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!