Probleme mit .formulaarray
11.02.2014 10:59:57
Maria
erstmal vielen Dank für die vielen Tipps und Lösungen die ich bisher hier im Forum gefunden habe! Nun möchte ich selbst eine Frage stellen, da ich auch nach langer Internetrecherche und Ausprobieren nicht auf meinen Fehler komme.
Es geht um diese Formel in meinem Code
With wsData.Range(ColumnToLetter(ColEndeVorg) & FirstRow & ":" & ColumnToLetter(ColEndeVorg) & _
_
_
x)
.FormulaArray = "=if(rc" & ColOrt & """in Zukunft"",MAX(IF((R" & FirstRow & "C" & ColFA & ":R[ _
_
_
-1]C" & ColFA & "=RC" & ColFA & "),R" & FirstRow & "C" & ColEnde & ":R[-1]C" & ColEnde & ",RC" & _
_
ColEnde & ")),"""")"
.Value = .Value
.NumberFormat = "dd.mm.yyyy"
End With
ColEndeVorg, ColFA, ColEnde sind dabei festgelegte Spaltenindizes (as integer), FirstRow die erste Datenzeile (Zeile 6) und x die letzte beschriebene Zeile (wird zuvor ermittelt. Die Formel funktioniert leider nicht...
Das "Problem" steckt bereits in folgendem Teil der aus übersichtlicheren und vereinfachten _
Formel, der auch zur Arrayrechenweise zwingt:
With wsData.Range("w6:w" & x)
.FormulaArray = "=MAX(IF((R6C2:R[-1]C2=RC2),R6C16:R[-1]C16,RC16))"
.Value = .Value
.NumberFormat = "dd.mm.yyyy"
End With
Ich dachte bisher, dass man .FormulaArray genau wie .FormulaR1C1 direkt in eine gesamte Spalte/Spaltenbereich schreiben kann. Wenn ich dass mache, steht aber in jeder Zeile der Bezug zur ERSTEN Zeile (also hier Zeile 6). Bspw. RC2, was normalerweise in Zeile 7 dann R7C2 ergibt etc. scheint nicht zu funktionieren. Auch R[]C2 oder R[0]C2 löst bei mir das Problem nicht.
Nun habe ich gefunden, bereits zwei Lösungsvarianten im Netz gefunden, die bei mir aber beide auch nicht einwandfrei funktionieren und mir auch mehr als Umgehung des Problems anstatt Lösung erscheinen.
1.
Die Formel als .FromulaR1C1 eingeben und anschließend
.FormulaArray=.FormulaR1C1
was getestet mit einigen Zeilen auch funktioniert, aber bei meiner vollständigen Liste ( _ aufgrund der Input-Datenquelle über 67 000 Zeilen, die ich anschließend über Pivot erfolgreich aussortiere/auswerte) einen Laufzeitfehler 13: Typen unverträglich liefert. Ich habe schon viele Varianten ausprobiert und festgestellt, dass der Code bis x= 65 541 funktioniert und bei 64 542 abbricht - also könnte ich den Bereich splitten und auf 2 Mal die Formel eintragen. Allerdings bricht der Teil
.value =. value
ab mit der Fehlermeldung Überlauf. Dies lässt sich wiederum umgehen, wenn man die gesamte Spalte kopiert über .copy und dann über pastespecial xlpastevalues nur die Werte einfügt - aber wieder nur ein Umweg...2.
Die Array-Formel nicht in den gesamten Bereich, sondern nur in die erste Zeile einfügen und dann kopieren.
With wsData.Range("w6")
.FormulaArray = "=MAX(IF((R6C2:R[-1]C2=RC2),R6C16:R[-1]C16,RC16))"
.copy Destination:= wsData.Range("w7:w" & x)
.Value = .Value
.NumberFormat = "dd.mm.yyyy"
End With
Gleiches Problem bei .value =.value ...
Weis jemand wie ich das Problem richtig löse und am Besten in den Bereich wsData.Range("w6:w" & x) direkt die Arrayformel eintragen kann? Was mache ich falsch, dass bei mir der Bezug immer auf die erste Zeile ist?
Irgendwie ist für mich .FormulaArray wie ein Buch mit Sieben Siegeln - viel gelesen, aber immer noch nicht komplett verstanden...
Irgendwelche andere Vorschläge?
Sorry, dass es so lange geworden ist, aber jetzt wisst ihr, was ich schon alles ausprobiert habe, und dass es immer noch nicht funktioniert :)
Vielen Dank für jeden Tipp!
Gruß
Maria