2012-01-18 9 views
2

に私は世界に国全体を挿入する方法を見つけることができませんエクセル参照領域多次元配列

Dim world(192,15,40) as Variant

Dim country(192,15) as Variant

でこれらの多次元配列をしました。何かのように:

world()()(2)=country

または

country(:,:,20)=currentSheet.Range("A1:F50")

か、単に地域を参照するバックテーブル、これは可能です

Range.value=world(20:50,1:50,2)

にそれを挿入するには?

ありがとうございました。

答えて

1

VBA Variantは非常に柔軟性があり、あなたがしたいことをするのに使うことができますが、やってはいけません正確には何を求めていますか?これらのキーは、3次元配列を切り取って、代わりに他の配列を含む配列を使用することです。

私はここにあなたのインデックスの意味を再配置される可能性があります

が、検討し、このような何か:

Dim china 
china = [china!Q42:X99] 

Dim india 
india = [india!Q42:X99] 

... 

Dim world(1 to 242) 
world(1) = china 
world(2) = india 

... 

[report!Q42:X99] = world(42) 

この例では、Variant秒の1次元配列を使用して、それぞれの要素は、2次元配列であります様々なExcelの範囲から来るVariantのです。3次元配列を立方体と考えることができるなら、この構造を(2-D)ページの(1-D)ブックと考えることができます。

通常、配列のみを使用してデータを混乱させると(ネストされたものなど)、危険が伴う可能性があります。しかし、ExcelスプレッドシートをサポートするVBAコードでは、しばしば最も自然な方法で作業を行うことができます。 VBAでTypeClassを定義することは可能ですが、データのソースと計算の最終結果の両方がワークシートのどこかの2D範囲にすぎないので、何度も過剰です。ここで

は、関連する質問への私のいくつかの関連する以前の答えです:

VBA pasting 3 dimensional array into sheet

How can I "ReDim Preserve" a 2D Array in Excel 2007 VBA so that I can add rows, not columns, to the array?

1

あなたが達成しようとしていることが分からないので、構文を修正するだけでは問題ありません。私はあなたのコードを修正するのに十分なバックグラウンドがあることを願っています。

あなたが書く場合:

Dim X as Variant 
X = .Range("A1").Value 

をその後、Xは、単一の値になります。

あなたが書く場合:Xは二次元アレイ(6 50〜1、1)のように大きされ

Dim X as Variant 
X = .Range("A1:F50").Value 

。これは、行の最初の次元であり、2番目の次元は列の次元です。これは通常の練習とは逆ですが、.Cells(Row,Column)と一致します。

また書くことができます。

Dim X(1 to 192) as Variant 
X(2) = .Range("A1:F50").Value 

はギザギザ配列の詳細についてExcel macro loading arraysに私の答えを参照してください。

1

これを達成するために使用できるコマンドは1つありません。私が知っている最良の方法は、コピーしたい寸法をループするために、次のようになります。あなたを保証しますLBOUNDとUBound関数を使用して

For i = LBound(country, 1) to UBound(country, 1) 
    For j = LBound(country, 2) to UBound(country, 2) 
     world(i, j, 2) = country(i, j) 
    Next j 
Next i 

は、配列の各次元からのデータのすべてを取得します。