Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1188to1192
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

mit VBA eine Matrixformel {=...} eintragen

mit VBA eine Matrixformel {=...} eintragen
Peter
Guten Tag
In der aktiven Tabelle möchte ich in Zelle CJ25 eine Matrixformel eintragen.
Wenn ich die Formel manuell eintrage (inkl. der geschweiften Klammern) und dann im Direktbereich eingeben
?ActiveCell.FormulaR1C1
erhalte ich den String, den ich unten eingesetzt habe. Mit R1C1 frage ich ab, da dann letztendlich ein Spaltenbereich mit dieser Matrixformel abgefüllt werden soll.
Cells(88,6).FormulaR1C1 = "=MAX(IF(spxNa=R[-1]C[-78],spxVe))-MIN(IF(spxNa=R[-1]C[-78],spxVe))"
Mein Problem ist nun, dass bei Ausführung des Codes zwar die richtige Formel, jedoch nicht als Matrixformel eingetragen wird.
Wie muss ich den Code anpassen, dass ich eine Matrixformel erhalte?
Danke und Gruss, Peter
AW: mit VBA eine Matrixformel {=...} eintragen
14.12.2010 11:53:00
Renee
Hi Peter,
Eine Matrixformel, muss in die .FormulaArray Eigenschaft eingetragen werden!
Cells(88,6).FormulaArray = "=MAX...

GreetZ Renée
.FormulaArray= ... owT
14.12.2010 11:53:11
Rudi
AW: .FormulaArray= ... owT
14.12.2010 12:01:52
Peter
Hallo Rudi
Geht das auch mit dem R1C1 Format?
Gruß Peter
Geht das auch mit dem R1C1 Format?
14.12.2010 12:10:25
Rudi
Hallo,
es geht nur damit.
Gruß
Rudi
AW: Alles klar, vielen Dank für alle Antworten
14.12.2010 14:56:36
Peter
nur mit R1C1
14.12.2010 12:11:05
Erich
Hi Peter,
in der VBA-Hilfe zu FormulaArray steht:
Anmerkungen
Wenn Sie diese Eigenschaft zur Eingabe einer Matrixformel verwenden, müssen Sie die Z1S1-Bezugsart
verwenden, nicht die A1-Bezugsart (siehe zweites Beispiel).
Hattest du da noch nicht geschaut? (Z1S1 meint hier natürlich R1C1.)
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: nur mit R1C1
14.12.2010 14:56:05
Peter
Hallo Erich
Danke für die Antwort. Jetzt habe ich es gesehen - meine erste Nachfrage sandte ich per Mobile, da ich gerade unterwegs war.
Freundlicher Gruss, Peter
AW: Doch nicht alles klar
14.12.2010 15:23:23
Peter
Hallo zusammen
Mir ist doch nicht alles klar:
Meine VBA Codezeile:
Sheets("ABC").Range(Cells(zStart,87, Cells(zEnd,87)).FormulaArray = "=MAX(IF(spxNa=R[-1]C[-78],spxVe))-MIN(IF(spxNa=R[-1]C[-78],spxVe))"
Ergibt mit in allen Zeilen des Ranges die Formel:
{=MAX(WENN(spxNa=I6;spxVe))-MIN(WENN(spxNa=I6;spxVe))} 'immer Bezug auf I6
Zudem kann ich eine einzelnen Formel nicht ändern ("Teile eines Arrays können nicht geändert werden").
Als Ergebnis möchte ich jedoch in Zelle
CI6: {=MAX(WENN(spxNa=I6;spxVe))-MIN(WENN(spxNa=I6;spxVe))}, in Zelle
CI7: {=MAX(WENN(spxNa=I7;spxVe))-MIN(WENN(spxNa=I7;spxVe))}, in Zelle
CI8: {=MAX(WENN(spxNa=I5;spxVe))-MIN(WENN(spxNa=I5;spxVe))}, usw.
Also immer den Bezug in der Spalte I auf die entsprechende Zeile. Zudem möchte ich die einzelnen Formeln ändern können.
Verstehe ich unter einer Array-Formel etwas Falsches?
Danke für jeden klärenden Hinweis.
Gruss, Peter
Anzeige
AW: Doch nicht alles klar - Klarstellung
14.12.2010 15:24:46
Peter
Formel muss hier natürlich lauten
CI8: {=MAX(WENN(spxNa=I8;spxVe))-MIN(WENN(spxNa=I8;spxVe))}, usw. (Bezug auf I8 und nicht auf I5)
AW: Doch nicht alles klar
14.12.2010 15:34:59
Rudi
Hallo,
Zudem möchte ich die einzelnen Formeln ändern können.

Dann musst du die Formel per Schleife in jede Zelle einzeln eintragen.
Weiterhin hast du wohl die R1C1-Bezüge nicht verstanden.
.FormulaArray = "=MAX(IF(spxNa=RC9,spxVe))-MIN(IF(spxNa=RC9,spxVe))"
Gruß
Rudi
AW: Doch nicht alles klar
14.12.2010 16:09:36
Peter
Hallo Rudi
Vielen Dank. Jetzt klappt es.
Gruss, Peter
Formel in eine Zelle eintragen, dann kopieren
14.12.2010 16:12:40
Erich
Hi Peter,
ja, mit den Matzrixform eln gehen die Begiffe munter durcheinander - und das li9egt nicht an dir!
Probnier mal

With Cells(6, 87)
.FormulaArray = "=MAX(IF(spxNA=R[0]C9,spxVe))-MIN(IF(spxNA=R[0]C9,spxVe))"
.Copy .Offset(1).Resize(2)
End With
Eine Frage an Rudi: Mit RC9 klappt das bei mir nicht. Bei dir?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
@Rudi: RC9 in XL12 ff.
14.12.2010 16:16:38
Erich
Hi Rudi,
dass RC9 bei mir nicht funzt, liegt an der XL-Version:
In meinem XL2010 ist RC9 eine Zelle in A1-Schreibweise...
Also vielleicht doch besser R[0]C9 schreiben - dann funzt es auch in ein paar Jahren noch, in XL2017... ;-).
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: @Rudi: RC9 in XL12 ff.
14.12.2010 16:34:40
Peter
Hallo Erich
Dankeschön!
Die Zeile mit .Copy .Offset(1).Resize(2) bringt bei rund 50 Zeilen eine grosse Geschwindigkeitsverbesserung.
Der Hinweis wegen der Schreibweise R[0]C9 ist sehr wertvoll - ich werde demnächst einige Codes auf Excel2010 umzustellen haben.
Gruss, Peter
Sub abc()
With Cells([zeStart].Row, [spDuo].Column)
.FormulaArray = "=MAX(IF(spxNA=R[0]C9,spxVe))-MIN(IF(spxNA=R[0]C9,spxVe))"
.Copy .Offset(1).Resize([zeEnd].Row - [zeStart].Row)
End With
End Sub

Anzeige
AW: @Erich: RC9 in XL12 ff.
14.12.2010 16:54:08
Rudi
Hallo Erich,
Mit RC9 klappt das bei mir nicht. Bei dir?

kann ich erst heut abend testen. Hab hier nur XP.
Gruß
Rudi
Ergänzender Hinweis: Schon unter Xl12...
14.12.2010 17:44:40
Luc:-?
…darf ein udFunktionsname (Einsatz im Blatt) nicht mit Rn bzw Zn (n=beliebige Ziffer) anfangen, weil sonst wohl ein R1C1-Bezug erwartet wird. Bei RCn ist mir das nicht aufgefallen.
Gruß Luc :-?
AW: @Rudi: Ergebnis
14.12.2010 21:44:49
Rudi
Hallo,
.FormulaR1C1 geht.
.FormulaArray nicht. Man muss mindestens R[]C9 schreiben. Die 0 kann man sich sparen.
Zu blöd. Vor allem, weil auch in 2007 noch explizit Z1S1 verlangt wird. Da hat MS mal wieder geschlampt.
Gruß
Rudi
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen
Forumthread
Beiträge