• 締切済み

配列をリサイズする

配列をリサイズする こんにちは。 エクセル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

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

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

  • rivoisu
  • ベストアンサー率36% (97/264)
回答No.4

質問の内容がちょっと把握できていないのですが「2次元配列の行と列の入れ替え」 ということでしたらhttp://officetanaka.net/excel/vba/tips/tips124.htmは参考になりませんか? 元の配列の値がどこからくるのか(csvなどのファイル、シート、DB)によりますけど バリアント型の変数に配列を入れることが出来ればシートを経由しても結構早いと思います。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

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) といった具合です

  • guruguru2
  • ベストアンサー率29% (39/132)
回答No.2

#1です。 うーん。私がfor文のやり方しか思いつかないので、 (しかも確実なので)、 私だったらそれでやっちゃいます。 for文では駄目なのですか? かなり短いコーディングな気がするのですが…

lelion1000
質問者

お礼

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

  • guruguru2
  • ベストアンサー率29% (39/132)
回答No.1

1.リサイズってことは配列数を変えたいって事ですか? 2.それとも配列の値を入れ替えたいってことでしょうか? 1ならRedim宣言 2なら規則性があるならFor文とかで入れ替えるとかですかね。

lelion1000
質問者

お礼

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

関連するQ&A