Anzeige
Archiv - Navigation
1492to1496
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

VBA: Matrixformel

VBA: Matrixformel
25.05.2016 12:17:32
Honigdachs
Hallo Excel-Freunde,
ich habe im Netz gesucht, werde aber nicht schlauer.
Wie kann ich folgenden Code so umschreiben, dass VBA mit einer Matrixformel abschließt statt einer normalen:
Range("B2:B19).FormulaLocal = "irgendeine Formel"
Wenn ich statt FormulaLocal FormulaArray benutze, spuckt er mir einen Fehler aus.
Danke und viele Grüße,
Kürsat

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Matrixformel
25.05.2016 12:24:40
Rudi
Hallo,
eine Matrixformel kannst du nur in eine Zelle schreiben.
Range("B2").formulaarray="DeineFormel"
Range("B2").Copy Range("B2:B19")
Gruß
Rudi

AW: VBA: Matrixformel
25.05.2016 13:37:14
Honigdachs
Hallo Rudi,
danke für die Antwort.
Es kommt alllerdings folgender Fehler: Die FormulaArray-Eigenschaft des Range-Objektes kann nicht festgelegt werden.
Wenn ich Deinen Code richtig verstehe, kopiert sie im Anschluss der Matrixformel in B2 diese Formel in den Bereich B2:B19. Allerdings ist es bei mir so, dass manche Formeln in der Hauptformel hochgezählt werden, d. h. in der Hauptformel gibt es Elemente, die dann ab B2 bis B19 hochgezählt werden.
Viele Grüße,
Kürsat

Anzeige
AW: VBA: Matrixformel
25.05.2016 13:40:14
Honigdachs
Hallo Rudi,
danke für die Antwort.
Es kommt alllerdings folgender Fehler: Die FormulaArray-Eigenschaft des Range-Objektes kann nicht festgelegt werden.
Wenn ich Deinen Code richtig verstehe, kopiert sie im Anschluss der Matrixformel in B2 diese Formel in den Bereich B2:B19. Allerdings ist es bei mir so, dass manche Formeln in der Hauptformel hochgezählt werden, d. h. in der Hauptformel gibt es Elemente, die dann ab B2 bis B19 hochgezählt werden.
Viele Grüße,
Kürsat

AW: VBA: Matrixformel
25.05.2016 14:12:23
Daniel
Hi
vielleicht solltest du mal deine Formel zeigen.
bei Matrixformeln gibt es zwei Varianten:
einzeilige Matrixformeln und mehrzeilige Matrixformel
eine mehrzellige Matrixformel ist eine einzige Formel, welche aber mehrere Ergebnisse ausgibt.
so eine mehrzeilige Matrixformel muss dann in einen Zeilbereich geschrieben werden, welcher so gross ist wie Anzahl der Ergebnisse der Formel.
bei einer einzelligen matrixformel steht als Äusserste Funktion einen Funktion, welche mehrere Werte zu einem Wert zusammenfasst (Summe, Max, Min, KGrösste, KKleinste), so dass das Formelergebnis in eine Zelle passt.
eine einzellige Matrixformel muss mit
Range("B2").formulaarray="DeineFormel"
Range("B2").Copy Range("B2:B19")
per VBA geschrieben werden, eine mehrzellige mit
Range("B2:B19").formulaarray="DeineFormel"
auch gelten für Matrixformeln mehr Einschränkungen als für normale Formeln, dh solltest mal deine Formel zeigen.
Gruß Daniel

Anzeige
AW: VBA: Matrixformel
25.05.2016 14:18:12
Honigdachs
Hallo Daniel,
danke für die Antwort!
Hier ist die Formel:
=WENN(ISTFEHLER(WENNFEHLER(INDEX('master data - 1'!companies;KKLEINSTE(WENN(INDIREKT(""'master data - 1'""&""!""&'event detection'!$B$4&2):INDIREKT(""'master data - 1'""&""!""&'event detection'!$B$4&'event detection'!$B$7)=1;ZEILE('master data - 1'!companies)-ZEILE('master data - 1'!B$2)+1);ZEILE(A1)));""""));"""";WENNFEHLER(INDEX('master data - 1'!B$2:INDIREKT(""'master data - 1'!B$""&'event detection'!$B$7);KKLEINSTE(WENN(INDIREKT(""'master data - 1'""&""!""&'event detection'!$B$4&2):INDIREKT(""'master data - 1'""&""!""&'event detection'!$B$4&'event detection'!$B$7)=1;ZEILE('master data - 1'!B$2:INDIREKT(""'master data - 1'!B$""&'event detection'!$B$7))-ZEILE('master data - 1'!B$2)+1);ZEILE(A1)));""""))
Gruß,
Kürsat

Anzeige
auch mal in der Hilfe lesen dazu ist die da
25.05.2016 14:44:47
Daniel
in der Onlinehilfe steht was von 256 Zeichen, die .FormulaArray maximal verwenden kann.
da dürfest du ein wenig drüber liegen.
von Hand kann man längere Formeln schreiben, aber für VBA gibt's engere Limits.
bei Normalen Formeln gibt's nen einfachen Trick um auch per VBA Formeln in der Länge einzugeben wie sie von Hand möglich sind, aber für Array-Formeln funktioniert der nicht.
Gruß DAneil

AW: auch mal in der Hilfe lesen dazu ist die da
25.05.2016 14:50:49
Honigdachs
Danke für den Hinweis. Das wusste ich nicht.

AW: auch mal in der Hilfe lesen dazu ist die da
27.05.2016 09:15:34
Honigdachs
Hallo Daniel,
ich habe fast die Lösung. Mit folgendem Code trägt er auch die lange Matrixformel ein:
Dim Zb As Long
Dim formula_part_1 As String
Dim formula_part_2 As String
Dim formula_part_3 As String
Dim formula_part_4 As String
Zb = Sheets("data").Cells(Rows.Count, 1).End(xlUp).Row
formula_part_1 = "=IF(ISERROR(aaa),"""",IFERROR(INDEX('master data - 1'!B$2:INDIRECT(bbb), _
KKLEINSTE(WENN(ccc,ROW('master data - 1'!B$2:INDIRECT(""'master data - 1'!B$""&'event detection'!$B$7))-ROW('master data - 1'!B$2)+1),ROW(A1))),""""))"
formula_part_2 = "IFERROR(INDEX('master data - 1'!companies,SMALL(IF(ccc,ROW('master data - 1'! _
companies)-ROW('master data - 1'!B$2)+1),ROW(A1))),"""")"
formula_part_3 = """'master data - 1'!B$""&'event detection'!$B$7"
formula_part_4 = "INDIRECT(""'master data - 1'!""&'event detection'!$B$4&2):INDIRECT(""'master  _
data - 1'!""&'event detection'!$B$4&'event detection'!$B$7)=1"
With Range("B2:B" & Zb)
.FormulaArray = formula_part_1
.Replace "aaa", formula_part_2, LookAt:=xlPart
.Replace "bbb", formula_part_3, LookAt:=xlPart
.Replace "ccc", formula_part_4, LookAt:=xlPart
End With
Nur trägt er hiermit in alle Zellen im Bereich "B2:B" & Zb die gleiche Formel ein. Das heißt: Ich brauche die R1C1-Notation, mit der ich aber noch nie gearbeitet habe und deswegen auf Deine Unterstützung angewiesen bin.
Viele Grüße,
Kürsat

Anzeige
AW: auch mal in der Hilfe lesen dazu ist die da
27.05.2016 10:13:58
Honigdachs
Mit
With Range("B2")
.FormulaArray = formula_part_1
.Replace "aaa", formula_part_2, LookAt:=xlPart
.Replace "bbb", formula_part_3, LookAt:=xlPart
.Replace "ccc", formula_part_4, LookAt:=xlPart
Range("B2").AutoFill Range("B2:B" & Zb)
End With

trägt er nun fortlaufend in jede Zelle die Formeln ein.
Allerdings erscheinen die Zellen in diesem Bereich leer, erst wenn ich in die Zellen gehe und nochmal mit strg, shift und enter abschließe, obwohl die selben Matrixformeln drin stehen, zeigt er mir den richtigen Output.
Wie kann man das beheben?

Anzeige
AW: auch mal in der Hilfe lesen dazu ist die da
27.05.2016 10:25:57
Daniel
Das ist der Trick, von dem ich meinte dass er nur mit normalen Formeln funktioniert, aber nicht mit Arrays.
Gruß Daniel

AW: auch mal in der Hilfe lesen dazu ist die da
27.05.2016 11:10:53
Honigdachs
Alles klar, danke.

AW: auch mal in der Hilfe lesen dazu ist die da
27.05.2016 11:25:51
Honigdachs
Hallo Daniel,
ich hab's zum Laufen bekommen. Der letzte Handgriff, der noch gefehlt hat, war, die letzten deutschen Formelwörter durch englische zu ersetzen.
Viele Grüße,
Kürsat

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige