2013-10-10 44 views
5

私はあなたがウォッチウィンドウ内の値を除いて貼り付けVBA配列

enter image description here

で何がロードされているされていることがわかりますアレーここ

Sub rangearray() 

    Dim arr() As Variant 
    Dim Rng As Range 
    Dim myCell As Range 
    Dim i As Integer 

    Set Rng = ActiveSheet.Range("G10:G14") 

    For Each myCell In Rng 
     ReDim Preserve arr(i) 
     arr(i) = myCell 
     i = i + 1 
    Next myCell 

    ActiveSheet.Range("H10:H14") = arr() 

End Sub 

に移入されます。このコードを持って、ワークブックに配列を戻すと、配列の最初の要素だけが貼り付けられます。

enter image description here

それは、配列をループすることなく、ワークシートに配列全体を貼り付けることは可能ですか?

UPDATE Sorceriからのリンクを見て取った後、私は.Transpose機能を使用するコードに修正されているので、私の改正のコードは次のようになり:

Sub rangearray() 

    Dim arr() As Variant 
    Dim Rng As Range 
    Dim myCell As Range 
    Dim i As Integer 

    Set Rng = ActiveSheet.Range("A1:A5") 

    For Each myCell In Rng 
     ReDim Preserve arr(i) 
     arr(i) = myCell 
     i = i + 1 
    Next myCell 

    ActiveSheet.Range("B1:B5") = WorksheetFunction.Transpose(arr) 

End Sub 
+1

なぜこのための配列が必要ですか? [THIS](http://stackoverflow.com/questions/19277994/error-13-when-pasting-from-another-workbook/19280614#19280614) –

+0

アレイから貼り付けたいので、別の範囲からは貼りません – spences10

+1

しかし、それはあなたがやっていることではありませんか? 'Range(" G10:G14 ") - > Range(" H10:H14 ")' –

答えて

5

は、使用したいと思うでしょうワークシートの転置機能http://msdn.microsoft.com/en-us/library/office/ff196261.aspx

以下を参照してください。あなたは、あなたが唯一のアレイ・ソリューションを、次にたい場合は、まだやろうとしているアクションを実行するために、配列を必要としない私は上記の私のコメントで述べたように範囲の値

Sub rangearray() 

Dim arr() As Variant 
Dim Rng As Range 
Dim myCell As Range 
Dim i As Integer 

Set Rng = ActiveSheet.Range("A1:A5") 

For Each myCell In Rng 
    ReDim Preserve arr(i) 
    arr(i) = myCell 
    i = i + 1 
Next myCell 

ActiveSheet.Range("B1:B5").Value = WorksheetFunction.Transpose(arr) 

End Sub 
+2

裸のリンクはコメントとして投稿する必要があります;もしリンクが消えたら?それは将来のユーザーには役に立たない。 –

+0

ええ、肉体がちょっと答えを出してください – spences10

+0

@SiddharthRoutもしリンクが消えたらMSに怒ります。リンクがなくなったとしても、私は関数の名前をつけて、誰かがインターネット検索を使用することができない場合は、コードを書くべきではありません。 – Sorceri

6

に割り当てる必要がありループ内で配列を埋めるための長い道のりをとる必要はありません。範囲の値を配列に直接代入します。転置する必要のない2D配列を作成します。

Sub rangearray() 
    Dim arr 
    Dim Rng As Range 

    With ActiveSheet 
     Set Rng = ActiveSheet.Range("G10:G14") 

     arr = Rng.Value 

     .Range("H10").Resize(UBound(arr, 1)).Value = arr 
    End With 
End Sub 
関連する問題