2017-01-19 19 views
0

Ich habe zwei Spalten, die mit Formeln gefüllt werden müssen (mit 5k bis 10k Werte). Das sind einfache Formeln und sie funktionieren. Wenn Sie jedoch direkt in die Zellen schreiben, verlangsamt sich das Programm zu sehr. Daher schreibe ich die Formeln in ein Array und füge das Array dann in die Arbeitsmappe ein. Das funktioniert auch gut, es bewertet die Strings einfach nicht. Ich habe versucht, EVALUATE ohne Erfolg zu verwenden. Wenn ich eine der kopierten Zellen auswähle, drücke F2 und Enter, sie funktionieren perfekt.Execute String Formeln aus Array

Codebeispiel:

ReDim Schreibblock(FirstRow To LastRowPos, 0 To 1) 

For j = FirstRow To LastRowPos 
    Schreibblock(j, 0) = "=" & SteigungPos.Address & "*$B$" & j & "+" & NullwertPosTren.Address & "" 
    Schreibblock(j, 1) = "=ABS($A$" & j & "-$C$" & j & ")" 
Next j 

Range("C" & FirstRow & ":D" & LastRowPos).Formula = [Schreibblock] 

und hier eine „Light-Version“ für das Lesen zu vereinfachen:

ReDim array(14 To 5000, 0 To 1) 

For j = 14 To 5000 
    Array(j, 0) = "=$B$10*$B$14+$B$9" <- This is what I see, but w/o "" 
    Array(j, 1) = "=ABS($A$14-$C$14)" <- This is what I see, but w/o "" 
Next j 

Range("C14:D5000").Formula = [Array] 

Es gibt keine Fehler, und es ist blitzschnell im Vergleich zu jeder Schleife in eine Zelle wirting. Ich würde jede Hilfe schätzen.

Carlos

Antwort

0

Verwenden Z1S1-Notation und lassen Sie die Array und Schleife:

Range("C" & FirstRow & ":C" & LastRowPos).FormulaR1C1 = "=" & SteigungPos.Address(0,0,xlR1C1) & "*RC2 +" & NullwertPosTren.Address(0,0,xlR1C1) & "" 
Range("D" & FirstRow & ":D" & LastRowPos).FormulaR1C1 = "=ABS(RC1 - RC3)" 
+0

Vielen Dank, das hat geholfen! Ich spreche noch nicht R1C1-Notation und die referenzierten Zellen sind umgezogen, aber ich werde versuchen, es herauszufinden. Diese Lösung funktionierte einwandfrei: 'Bereich (" C "& FirstRow &": C "& LastRowPos) .FormulaR1C1 =" = "& SteigungPos.Address (SteigungPos.Row, SteigungPos.Column, xlR1C1) &" * RC2 + "& NullwertPosTren.Address (NullwertPosTren.Row, NullwertPosTren.Column, xlR1C1) & "" 'Bereich (" D "& FirstRow &": D "& LastRowPos) .FormulaR1C1 =" = ABS (RC1 - RC3) " – elserra