2017-02-07 15 views
0

これはワークシートの値を2次元配列に格納する有効な方法であるかどうかを確認しようとしています。これまでのところ私が思い付くものをvbaワークシートから値を読み取って2次元配列に格納する方法

は、このコードです:

'Generate a random integer from cell A1 to J10 

Sub numrange() 
    Dim r As Range 
    Set r = Range("A1:J10") 
    With r 
     .Formula = "=randbetween(1,100)" 
     .Copy 
     .PasteSpecial (xlPasteValues) 
    End With 

'Turn A1 to J10 into a 2d array of integers 

Dim arr As Variant 
arr = Range("A1:J10") 

arr = Range("A1").Resize(UBound(arr, 1), UBound(arr, 2)) 

はあなたの配列を持っているしたい場合は、この有効な配列

+0

FWIW「セルで、セルを」コピーする必要がありますpy paste special' –

+0

その後、arr(10,10)は二重でJの値は10ですが、何をしたいのですか? int型またはnon-variant型が特に必要な場合は、ループして手動で行う必要があります。 –

+0

その '既にOKです。最後のステートメント 'arr = Range(" A1 ")、Resize(UBound(arr、1)、UBound(arr、2))'を避けてください。また、 '.Copy'と' .PasteSpecial(xlPasteValues) 'を' With r'ブロック – user3598756

答えて

0

作るために作ることができる任意の明確化や編集をいただければ幸いです純粋integer値は、あなただけの `.Values = .Values`代わりに`協力を行うには、それが高速です

Sub numrange() 
    Dim r As Range 
    Set r = Range("A1:J10") 
    r.Formula = "=randbetween(1,100)" 

    Dim arr As Variant 
    Dim i As Integer, j As Integer 

    arr = Range("A1:J10").Value 
    ReDim arrint(LBound(arr, 1) To UBound(arr, 1), LBound(arr, 2) To UBound(arr, 2)) As Integer 
    For i = LBound(arr, 1) To UBound(arr, 1) 
     For j = LBound(arr, 2) To UBound(arr, 2) 
      arrint(i, j) = arr(i, j) 
     Next 
    Next 
End Sub 
+0

シャムの男のように動作し、私はReDimの使用が好きです。 – EricCarlson

+0

うれしいです。良いコーディング! – user3598756

関連する問題