2016-06-24 17 views
1

これを行う方法がわからないので、どんな助けも素晴らしいでしょう。配列を使用して、行ごとに1行ずつExcelワークブックに送ります。これは数多くの計算(プログラムするには多すぎる)を行い、別の配列に格納する13の値を吐き出します。これは可能ですか?Excel VBA - 既存の配列に新しい行を書き込む

Dim aP() as Variant 
Dim wbR as Workbook 
Dim wsR as Worksheet 
Dim i as Long 

Set wbR = Workbooks.Open([directory]) 
Set wsR = wbR.Sheets("Sheet1") 
aP = Application.Transpose(Activesheet.Range("A1:Z100")) 
For i = 1 to 100 
wsR.Range("A1:A26") = Application.Index(aP, [row(1:26)], i) 
'this is where I need help. Want to paste range C1:C13 into another array, 
'so that I can paste it back into the activesheet. I do not wish to paste it 
'straight back to the worksheet, but accumulate all the data into array and 
'and then paste the array into the activesheet 
Next i 

Exit Sub 
+3

はい、間違いなく可能性を計算するための新しいデータを貼り付けた後。あなたの現在のコードを投稿すれば、人々が提案してくれるはずです。 –

+0

現在のコードを含めるように質問を編集しました –

答えて

0

コードを非常に効率的にしようとしているようです。私はそれをスピードアップするかもしれないいくつかの変更を加えました。

 
Sub BuildArrayR100C26() 
    Dim arData(99, 12) 
    Dim arCalculations 
    Dim i As Integer, j As Integer 
    Dim wbR As Workbook 
    Dim wsR As Worksheet 

    Application.ScreenUpdating = False 
    Application.Calculation = xlCalculationManual 
    Set wbR = Workbooks.Open([directory]) 
    Set wsR = wbR.Sheets("Sheet1") 
    For i = 0 To 99 

     wsR.Range("A1:A26").Value = Application.Transpose(ActiveSheet.Range("A1:Z1").Offset(i)) 
     Application.Calculate 

     arCalculations = wsR.Range("C1:C13").Cells(j + 1) 

     For j = 0 To 12 
      arData(i, j) = arCalculations(j + 1, 1) 
     Next 

    Next i 
    Sheet2.Range("A1").Resize(UBound(arData, 1), UBound(arData, 2)).Value = arData 
    Application.Calculation = xlCalculationAutomatic 
    Application.ScreenUpdating = True 
End Sub 

この行は、範囲をwsRに1行ずつ貼り付けます。

wsR.Range。( "A1:A26")値= Application.Transpose(ActiveSheet.Range( "A1:Z1")オフセット(I)。)

このループは、コピーし、あなたの計算配列

For j = 0 To 12 
    arData(i, j) = wsR.Range("C1:C13").Cells(j + 1) 
Next 

ScreenUpdatingの電源をオフにして、計算

Application.ScreenUpdating = Falseの

Application.Calculation = xlCalculationManual

再計算我々は

Application.Calculate

+0

入力データをarDataにコピーしているようです。私はすでにコードで行っています - aP = Application.Transpose(Activesheet.Range( "A1:Z100"))。ループでは、aPの1行をwsRワークシートに貼り付け、ワークシートを計算して、wsRワークシートとセル(C1:C13)から同じループに行を追加する別の配列が必要です。配列をアクティブなワークブックに戻しますが、シート2 –

+0

私が行っていたことを忘れてしまいました...笑。 –

+0

トーマス - 私が間違っていれば私を訂正しますが、計算を配列にコピーするループはセルごとに行うのですか?それがそうであれば、C1からC13の全範囲を実行することが可能です –

関連する問題