Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

mit VBA eine Matrixformel {=...} eintragen

Forumthread: 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
Anzeige
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
Anzeige
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
Anzeige
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
Anzeige
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 :-?
Anzeige
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

Infobox / Tutorial

Mit VBA eine Matrixformel in Excel eintragen


Schritt-für-Schritt-Anleitung

Um eine Matrixformel in Excel mit VBA einzutragen, befolge diese Schritte:

  1. Öffne die Excel-Datei und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu, indem du mit der rechten Maustaste auf "VBAProject" klickst und "Einfügen" > "Modul" wählst.

  3. Gib den folgenden Code ein, um eine Matrixformel in eine Zelle einzutragen:

    Sub MatrixformelEingeben()
        With Cells(25, 88) ' Zelle CJ25
            .FormulaArray = "=MAX(IF(spxNa=R[-1]C[-78],spxVe))-MIN(IF(spxNa=R[-1]C[-78],spxVe))"
        End With
    End Sub
  4. Schließe den VBA-Editor und führe das Makro aus, um die Matrixformel einzutragen.

Stelle sicher, dass du die R1C1-Bezugsart verwendest, da dies notwendig ist, um eine excel vba matrixformel korrekt einzugeben.


Häufige Fehler und Lösungen

  • Fehler: "Teile der Matrix können nicht geändert werden."

    • Lösung: Dies tritt auf, wenn du versuchst, einen Teil einer Matrixformel zu ändern. Stelle sicher, dass deine Formeln korrekt eingegeben sind und die gesamte Matrix auf einmal bearbeitet wird.
  • Fehler: "Die Formel wird nicht als Matrixformel eingetragen."

    • Lösung: Achte darauf, dass du .FormulaArray anstelle von .Formula verwendest, um eine excel matrixformel einzugeben.

Alternative Methoden

Eine alternative Methode zur Eingabe einer Matrixformel ist die Verwendung von Schleifen, um verschiedene Zellreferenzen zu bearbeiten. Hier ein Beispiel:

Sub MatrixformelnSchleife()
    Dim i As Integer
    For i = 6 To 50 ' Beispiel von Zeile 6 bis 50
        Cells(i, 91).FormulaArray = "=MAX(IF(spxNa=R[" & (i - 6) & "]C[-3],spxVe))-MIN(IF(spxNa=R[" & (i - 6) & "]C[-3],spxVe))"
    Next i
End Sub

Diese Methode ermöglicht es dir, die Formeln für verschiedene Zeilen dynamisch einzugeben.


Praktische Beispiele

Hier sind einige praktische Beispiele für die Verwendung von vba formulaarray:

  1. Matrixformel für eine einzelne Zelle:

    Cells(1, 1).FormulaArray = "=SUM(IF(A1:A10>5,1,0))"
  2. Matrixformel für einen Bereich:

    With Range("A1:A10")
        .FormulaArray = "=TRANSPOSE(B1:B10)"
    End With

Diese Beispiele verdeutlichen, wie du excel matrixformel und formulaarray vba nutzen kannst, um komplexe Berechnungen durchzuführen.


Tipps für Profis

  • R1C1 vs. A1-Bezugsart: Verwende immer die R1C1-Bezugsart in VBA, insbesondere wenn du mit formulaarray arbeitest, um Komplikationen zu vermeiden.
  • Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen in deinem VBA-Code, um unerwartete Probleme beim Eingeben von Matrixformeln zu vermeiden.
  • Leistungsoptimierung: Nutze .Copy und .Offset, um die Performance zu steigern, wenn du mehrere Formeln gleichzeitig einträgst.

FAQ: Häufige Fragen

1. Wie gebe ich eine Matrixformel in Excel ein?
Du kannst eine Matrixformel eingeben, indem du die .FormulaArray-Eigenschaft in VBA verwendest.

2. Warum kann ich Teile einer Matrix nicht ändern?
Das liegt daran, dass Excel die Struktur von Matrixformeln schützt. Du musst die gesamte Formel neu eingeben, um Änderungen vorzunehmen.

3. Ist die R1C1-Bezugsart zwingend erforderlich?
Ja, für die Verwendung von excel vba formulaarray ist die R1C1-Bezugsart erforderlich, da A1-Bezüge nicht unterstützt werden.

4. Kann ich eine Matrixformel in mehreren Zellen gleichzeitig eingeben?
Ja, du kannst eine Matrixformel in einem Bereich von Zellen eingeben, indem du die .FormulaArray-Eigenschaft auf den gesamten Bereich anwendest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige