2016-08-17 9 views
0

Excelのバリアントを指定した範囲に貼り付けるときに問題があります。私は以下のコードを持っていますが、[E1:E15]の出力は全範囲で0です。私が見たいと思っているのは、15までです。VBA - バリエーションの値を貼り付け

この特定の問題の解決策を見つけることができませんでした(この問題がExcel用語として定義されていることが分かりませんでした)。 VBAでこの特定のコードまたはこれを完了するためのより自然な方法のための任意の助けは非常に感謝しています。ありがとう!

Sub TEST() 

Dim SIZE As Integer 
SIZE = 15 

Dim VECTOR() As Integer 
ReDim VECTOR(SIZE) 

Dim i 

For i = 1 To SIZE 

    VECTOR(i) = i 

Next i 

[E1:E15].Value = VECTOR 

End Sub 
+0

それ '[E1:E15]'の表記が有効かもしれないが、それは暗黙的にアクティブなブック内のアクティブなワークシートを参照することです。あなたはそれについてもっと明示し、 'ActiveSheet.Range(" E1:E15 ").Value'を代入することができます。ワークシートを後でパラメータ化する方がずっと簡単です。言うまでもなく、一般的に遭遇する表記ではないので、コードを維持する人に少しでも "WTF"の瞬間を惜しまないかもしれません。 –

+0

作成した配列は実際には1D配列であり、必要な2D型のRow型またはColumn型ではありません。 – PaulG

答えて

1

水平方向の配列を垂直方向の範囲に渡そうとしています。

いずれかの配列を転置または1の第2の寸法とそのアレイ2Dを行う:

Sub TEST() 

Dim SIZE As Integer 
SIZE = 15 

Dim VECTOR() As Integer 
ReDim VECTOR(1 To SIZE, 1 To 1) 

Dim i 

For i = 1 To SIZE 

    VECTOR(i, 1) = i 

Next i 

[E1:E15].Value = VECTOR 

End Sub 

トランスバージョン:

Sub TEST() 

Dim SIZE As Integer 
SIZE = 15 

Dim VECTOR() As Integer 
ReDim VECTOR(1 To SIZE) 

Dim i 

For i = 1 To SIZE 

    VECTOR(i) = i 

Next i 

[E1:E15].Value = Application.Transpose(VECTOR) 

End Sub 

一つ警告:トランスポーズに限界があります処理できる項目の数。

+0

パーフェクト、コードのおかげで。私は作成された配列が水平であることを知らなかった!ありがとう! –

0

か、単に

[E1:E15] = [row(E1:E15)] 
関連する問題