2016-06-25 7 views
5

Ich habe eine sehr große Tabelle, die ich Berechnungen ausführen möchte. Um das zu beschleunigen, möchte ich sie in vba machen. Ich habe ein Grundwissen über vba, also habe ich versucht, Code zu schreiben, der einfach die Zellen in Spalte A kopiert und sie einem Array zuordnet und dann alle Werte wieder in eine andere Spalte D einfügt. Ich habe numrows definiert, um die Nummer zu bekommen von Zeilen nach unten, da dies von Monat zu Monat geändert wird. Ich dachte, wenn ich das zur Arbeit bringen könnte, könnte ich es von dort aus aufbauen - aber leider kann ich das nicht zur Arbeit bringen. Wenn jemand mir sagen könnte, was ich falsch mache, würde ich es wirklich schätzen.Excel VBA zuweisen Werte zu Array und dann in Arbeitsblatt einfügen

Ich habe versucht, viele Variationen davon - im Moment bekomme ich den Fehler Run Time Error '424' Objekt benötigt, damit ich denke, das Array ist leer.

Option Explicit 
Option Compare Text 
Option Base 1 


Sub Macro1() 

Dim numRows As Long 

Dim numCols As Integer 
numCols = 1 

Dim RowCounter As Long 
Dim ColCounter As Integer 
Dim SumCols() As Variant 
numRows = Cells(Rows.Count, "A").End(xlUp).Row 
ReDim SumCols(numRows, numCols) 
Dim tempSumCols As Variant 

tempSumCols = Range("A2", Cells(numRows, 1)) 

For RowCounter = 1 To numRows 
    For ColCounter = 1 To numCols 
     SumCols(RowCounter, ColCounter) = tempSumCols(RowCounter, ColCounter).Value 
    Next ColCounter 
Next RowCounter 

Range("D2", Cells(numRows, "D")) = SumCols 





End Sub 
+0

In welcher Zeile wird der Fehler angezeigt? Wir sollten nicht raten müssen. –

+0

Entschuldigung, dies ist das erste Mal, dass ich eine Frage stelle, ich werde sicherstellen, dass ich den Fehler in zukünftigen Fragen einbeziehe. –

Antwort

1

Die einfachste Art und Weise eine Anordnung aus einem Bereich zu füllen:

  • erklärt das Array als Variante
  • schafft eine Reihe von der richtigen Form
  • array = range() Wert.

können Sie jetzt das Array iterieren mit

For i = lBound(array) to uBound(array)

oder

For each e in array

 
Sub Macro1() 

    Dim SumCols As Variant 
    Dim e As Variant 

    SumCols = Range(Range("A2"), Range("A" & Rows.Count).End(xlUp)).Value 

    For Each e In SumCols 

    Next 

    Range("D2").Resize(UBound(SumCols, 1), UBound(SumCols, 2)) = SumCols 

End Sub 
+0

Dank einer Million, das hat funktioniert und ist wirklich effizient. –

+0

Gern geschehen, froh, dass es geholfen hat –

2

Code zu beheben, müssen Sie numRows in beiden Arrays Weil Sie bei A2 beginnen übereinstimmen - Ihre Zeilenindex neds

Und auch

erhöht werden - remove .Value vom zweiten Array

Dies sollte funktionieren - oder zumindest Laufzeitfehler entfernen:

Sub Macro1() 

Dim numRows As Long 

Dim numCols As Integer 
numCols = 1 

Dim RowCounter As Long 
Dim ColCounter As Integer 
Dim SumCols() As Variant 
numRows = Range("A" & Rows.Count).End(xlUp).Row 
ReDim SumCols(numRows, numCols) 
Dim tempSumCols As Variant 

' Increment number of rows to match numrows starting at A2 
tempSumCols = Range("A2", Cells(numRows + 1, 1)) 

For RowCounter = 1 To numRows 
    For ColCounter = 1 To numCols 
     ' Remove .Value from tempSumCols 
     SumCols(RowCounter, ColCounter) = tempSumCols(RowCounter, ColCounter) 
    Next ColCounter 
Next RowCounter 

Range("D2", Cells(numRows, "D")) = SumCols 

End Sub 
+1

Danke dafür, es entfernte den Fehler, aber es gab immer noch ein Problem mit meinem Code, also ging ich mit Thomas Inzina Code, der viel effizienter als meins war –

Verwandte Themen