• 締切済み

配列をリサイズする

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

  • vectorのresizeについて

    class A{ vector<double> data; public: A(int a){ this->data.resize(a); } }; template<class T> class B { std::vector<T> vec; public: B(int a){ this->vec.resize(a); } }; int main() { B<A> c(10); } としたとき class A のコンストラクタの値を指定することができません. vectorのresizeにコンストラクタの値を指定することができるのでしょうか. また,resize以外にこのようなことをすることができるのでしょうか. 回答よろしくお願いします.

  • VBAで生成した配列の受渡

    お世話になります。 エクセルAのVBAで、配列Aを生成・使用しています。 アクセスBのVBAで、その配列Aの中身を使用したいのですが、 現在は、  エクセルA:配列Aの中身をテキストに書き出す。  アクセスB:テキストを取り込む という形で、受渡をしています。 このようなテキストを介さずに、 直接、配列のコピー(もしくは、エクセルの配列Aをアクセスで直接しよう) する方法はあるのでしょうか? 何卒宜しくお願いします。

  • VBAの配列について

    VBAの配列について質問があります。 以下のような配列Aと配列Bがあったとします。 やりたいことは、配列Cを作成して、配列Aと配列Bを結合したいです。 ----------------------------------------- Dim 配列A(3) 配列A(0) = 10 配列A(1) = 11 配列A(2) = 12 Dim 配列B(3) 配列B(0) = 100 配列B(1) = 110 配列B(2) = 120 ---------------------------------------- Dim 配列C(6) 配列A(0) = 10 配列A(1) = 11 配列A(2) = 12 配列A(3) = 100 配列A(4) = 110 配列A(5) = 120 ---------------------------------------- 配列Cを作るために、配列Aを拡張して、配列Bを挿入すれば可能 でありますが、関数のようなもので簡単に表現できないもので しょうか? 何かご存知でしたが、ご教授願います。

  • 配列について

    C言語についてです。 配列を次のように指定します。 a[3][3][3]={{ {1,7,6}, {6,9,2}, {3,1,1}, },{ {4,6,5}, {5,2,2}, {9,3,7}, },{ {2,6,8}, {2,2,4} {1,1,5}, }} b[3][3]={ {5,5,1}, {3,8,2}, {6,7,0}, } aの配列の中で、bの配列との差が1であるのが多い配列を表示するプログラムを教えてください。 ただし、 {1,7,6}, {6,9,2}, {3,1,1}, なら1、 {4,6,5}, {5,2,2}, {9,3,7}, なら2、 {2,6,8}, {2,2,4} {1,1,5}, なら3と表示する。

  • ttest関数の配列の指定

    エクセルのttest関数に関する質問です。 A2~A10のセルに「はい」「いいえ」のどちらかが書いてあり、B2~B10には何らかの数字が書いてあります。 ttest関数を使って、「はい」の配列と「いいえ」の配列の検定を行うため =ttest({A2:A10,"はい",B2:B10}, {A2:A10,"いいえ",B2:B10}, 2, 3) と書いたのですが、エラーが出てしまいます。 どう書けばよいのでしょうか。

  • 配列のソートについて

    配列をソートした時、もともとデータのあった配列番号を記憶しておきたいのですが いい方法はないでしょうか (31,55,84,20,96,14); //1 2 3 4 5 6 ↓ (14,20,31,55,84,96) //6 4 1 2 3 5    ※ソート前の配列番号 いくつかの行(配列A)の、違う列にあるデータを抜き出して配列Bにまとめた後、配列Bをソート その後、配列Bのもともとの順番の位置の行にあるデータを上からコピーしていく感じで行ごとのソートを考えています イメージはこんな感じです a[0]=[1,512,200]; a[1]=[3,100,1]; a[2]=[4,100,265]; a[3]=[8,300,1]; //ソート対象を抜き出す b[0]=a[0][1]; b[1]=a[1][2]; b[2]=a[2][0]; b[3]=a[3][1]; b.sort(); c[0]=a[b[0]のソート前の配列番号]; c[1]=a[b[1]のソート前の配列番号]; c[2]=a[b[2]のソート前の配列番号]; c[3]=a[b[3]のソート前の配列番号];

  • 二つの配列から連想配列を作る方法

    @Aと@Bという二つの配列があり、そこから %C = ( "$A[0]" => "$B[0]", "$A[1]" => "$B[1]", "$A[2]" => "$B[2]", ・ ・ ・ ); という連想配列を作ることは出来ますでしょうか。 @Aと@Bは変動するので%Cは自動的に作成したいのです。 宜しく願い致します。

    • ベストアンサー
    • Perl
  • PHPの配列でわからないことがあるので教えてください。

    PHPの配列でわからないことがあるので教えてください。 例えば以下のような2つの配列$aと$bがあるとします。 $a[0]=a、$a[1]=b、$a[2]=c $b[0]=w、$b[1]=q、$b[2]=b、$b[3]=c これで、$a[1]と$b[2]の中身が同じであることを取得し、さらに$bの配列の添え字の2を返すようにしたいのですが、わかりません。 どのようにプログラムを書けばよいのでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 配列について

    配列の要素数をinteger型にいれたいのですがどうしたらいいですか? 例   Dim A() As String   Dim B AS Integer       A = "あ","い","う" Aの要素数3をBに入れたいのです。 この配列の作りかたもあっているか分かりませんがよろしくお願いします。

  • 連想配列を配列に入れるには

    下記のような連想配列を配列に入れる簡単な方法はありますか。 array("a"=>"1","b"=>"2") 期待する結果(print_r) Array ( [0] => Array ( "a" => "1" ) [1] => Array ( "b" => "2" ) ) 宜しくお願い致します。

    • ベストアンサー
    • PHP