2017-06-19 1 views
0

Ich frage mich, ob es eine schnellere Möglichkeit gibt, eine Liste von Werten in ein Tabellenobjekt einzufügen. Die Methode, die ich bin mit geht so:, wie Array-Liste in Tabelle einfügen?

1) Löschen Sie die alten Daten aus der Tabelle

2) in neue Datumswerte in die Tabelle finden und die Tabelle lassen Formeln automatisch ausfüllen.

Das Problem ist jetzt, dass dieser Prozess unglaublich langsam ist, da ich über 7 Tabellen und 4k + Daten zu bevölkern habe.

Normalerweise, wenn es nur die Werte einfügt, funktioniert Excel unglaublich schnell. Aber wenn es um Tabellenobjekte geht, wird es aus irgendeinem Grund viel langsamer.

Ich denke, es gibt eine Möglichkeit, dies viel schneller zu tun, indem Sie das Tabellenobjekt manipulieren, aber bisher hatte ich kein Glück.

*table1 
    1   2  3  4  5  6 
A Date  1D  2D  3D  4D  5D 
B 1/1/2016 Formula Formula Formula Formula Formula 
C 2/1/2016 Formula Formula Formula Formula Formula 
D 3/1/2016 Formula Formula Formula Formula Formula 
E 4/1/2016 Formula Formula Formula Formula Formula 
F 5/1/2016 Formula Formula Formula Formula Formula 
G 6/1/2016 Formula Formula Formula Formula Formula 
H 7/1/2016 Formula Formula Formula Formula Formula 

Dim ws(), datelist() As Variant 
For i = 1 To UBound(ws) 
    For j = 1 To UBound(datelist) 
     Sheets(CStr(ws(i))).Cells(j + 1, 1) = datelist(j) 
    Next j 
Next i 

* ws() bezieht sich auf Array, in dem i-Arbeitsblatt Namen speichern

* datelist() in die Zellen einzufügen i zu den Terminen wollen verweist.

nicht sicher, ob meine Beschreibung des Problems klar genug ist.

+0

Vielleicht möchten Sie Auto Berechnung und screenupdate vor dieser alten Daten Entfernung und neue Daten hinzufügen deaktivieren. Welche Art von Daten enthält "datelist (j)"? Wenn Sie wirklich Formeln verwenden, können Sie die Formel (** FormulaR1C1 ** style) nach allen hinzugefügten Daten in die Tabellenspalte einfügen. – PatricK

+0

Dieser obige Prozess ist Teil eines größeren Unterprogramms, die üblichen Berechnungen, Warnungen und Bildschirmaktualisierungen wurden bereits deaktiviert. Die Werte in der Datumsliste (j) sind Datumsangaben, sie werden jedoch als Zeichenfolge gespeichert. Die in den Tabellen automatisch aufgefüllten Formeln sind ziemlich lang und beziehen sich auf verschiedene Dinge für verschiedene Tabellen. Daher würde ich lieber die Auto-Populate-Funktion nutzen, anstatt mehrere Subroutinen zum Auffüllen oder Berechnen der Werte zu codieren. – adam

+0

Erledigt eine schnelle Suche, hilft das? https://stackoverflow.com/questions/19300555/paste-vba-array –

Antwort

1

Eine schnelle Suche ergab this answer.

Um es auf Ihrem Fall zutreffen, statt: -

For i = 1 To UBound(ws) 
    For j = 1 To UBound(datelist) 
     Sheets(CStr(ws(i))).Cells(j + 1, 1) = datelist(j) 
    Next j 
Next i 

Verwendung: -

For i = 1 To UBound(ws) 
    Sheets(CStr(ws(i))).Range("A" & j + 1 & ":A" & j + (1 + UBound(datelist))) = WorksheetFunction.Transpose(datelist) 
Next i 
+0

hallo, danke! Ihre Formel funktioniert nach dem Entfernen der "j" s. Es scheint jedoch etwas falsch zu sein mit Daten, die in der Tabelle endete. Einige von ihnen scheinen das falsche Format oder die falschen Texte zu sein, was dazu führt, dass die Formeln in der Tabelle nicht funktionieren. Gibt es eine Möglichkeit, die Daten während der Verwendung von Transpose zu formatieren? – adam

+0

es ist in Ordnung, ich habe das Formatierungsproblem gelöst. Danke vielmals!! – adam