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

Evaluate - ArrayFormel

Forumthread: Evaluate - ArrayFormel

Evaluate - ArrayFormel
06.04.2016 20:15:18
Coco99
Hallo,
In meiner Tabelle möchte ich keine Array-Formel per VBA einfügen, um zum gewünschten Ergebnis zu gelangen. Folgende Formel steht bereits in den Zellen:
=MAX(WENN(($F$5:$F$300=A2)*($K$5:$K$300=C1);($R$5:$R$300;" - ")
Abschließend fehlt mir nur noch der Befehl für die geschweiften Klammern:STRG+SHIFT+RETURN
damit mir ein Wert angegeben wird und nicht #WERT in den Zellen steht.
Diesen würde ich gerne per VBA Code einfügen. Ich habe probiert den Befehl über die Evaluate Funktion auszuführen:
Set FormulaInCell = ActiveSheet.Evaluate("D5")
Sheets("Tabelle39").Cells(6, 4).Formula = FormulaInCell
Leider wird so nicht die Formel mit Geschweiften Klammern in der Zelle ausgegeben, sondern nur #Wert!.
Ist es möglich über Evaluate und Cells( zeile, spalte).Formula den Befehl auszuführen, sodass die Formel ausgewertet wird. Oder hat jemand eventuell einen anderen Vorschlag?
Vielen Dank!

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Evaluate - ArrayFormel
06.04.2016 22:31:36
snb
Max(" - ") ?
y= [MAX(($F$5:$F$300=A2)*($K$5:$K$300=C1)*($R$5:$R$300))]

AW: Evaluate - ArrayFormel
07.04.2016 00:35:25
Coco99
Ich würde aber gerne die Max Wenn Formel nutzen, und wenn möglich über Cells(zeile, spalte).formula auf die Formel die bereits in der Zelle steht zugreifen.. Kann mir dabei jemand weiterhelfen?

Anzeige
In D5 steht also eine nicht als MatrixFml ...
07.04.2016 01:31:38
Luc:-?
…gekennzeichnete Fml, Coco,
die du durch den Wert ersetzen willst, der bei ihrer Ausführung als MatrixFml herauskäme. Da erhebt sich natürlich die Frage, warum du sie nicht gleich als MatrixFml einträgst, dann würde ein einfaches …
Sheets("Tabelle39").Cells(6, 4) = Sheets("Tabelle39").Cells(6, 4) reichen.
Falls du das partout nicht machen willst, solltest du aber auch den (US-Original-)FmlText, nicht das Fml-Ergebnis oder gar nur eine ZellAdresse evaluieren wollen. Dabei kommt allerhöchstens raus, was ohnehin schon in der Zelle steht. Das macht man also so:
Sheets("Tabelle39").Cells(6, 4) = ActiveSheet.Evaluate(ActiveSheet.Range("D5").Formula)
Falls du aber nur die Fml zur MatrixFml machen willst, musst du so vorgehen:
Sheets("Tabelle39").Cells(6, 4).FormulaArray = ActiveSheet.Range("D5").FormulaR1C1
Wobei ich natürlich nicht weiß, warum D5 und ActiveSheet verwendet wird, da dein Text eigentlich etwas Anderes aussagt.
Feedback nicht unerwünscht! Gruß, Luc :-?
Besser informiert mit …

Anzeige
AW: In D5 steht also eine nicht als MatrixFml ...
07.04.2016 14:33:49
Coco99
Vielen Dank das ist genau die Lösung, die ich gesucht hatte! Dann hatte ich mich wohl falsch ausgedrückt.
Ich probiere es morgen aus und gebe dir dann eine Rückmeldung, ob es geklappt hat!
Wäre dies Variante auch möglich:
Sheets("Tabelle39").Cells(6, 4) = ActiveSheet.Evaluate(ActiveCell.Formula)
LG Coco

Anzeige
Im Prinzip ja! owT
07.04.2016 14:58:08
Luc:-?
:-?

AW: Evaluate - ArrayFormel
08.04.2016 11:43:37
Coco99
Leider hat es nicht funktioniert: Laufzeitfehler 1004
Die Formula Array Eigenschaft des Range Objektes kann nicht festgelegt werden.
Was kann ich tun, um diesen Fehler zu beheben?
Danke!

Dann BspDatei mit dem, was du wirklich ...
08.04.2016 11:51:13
Luc:-?
…machen willst, Coco,
und deinem Versuch (kein Bild) hochladen!
Luc :-?

Anzeige
AW: Evaluate - ArrayFormel
08.04.2016 12:04:47
Coco99
In D6 steht Folgende Formel:
=MAX(WENN(($F$5:$F$300=A2)*($K$5:$K$300=C1);($R$5:$R$300;" - ")
Es wird mir der Fehler #Wert! angezeigt, da die geschweiften Klammern fehlen
Diese würde ich gerne per VBA Code automatisch hinzufügen:
If Sheets("Tabelle39").Range("D6").Formula = "#WERT!" Then
Sheets("Tabelle39").Cells(6, 4).FormulaArray = ActiveSheet.Range("D6").FormulaR1C1
End If

Wenn ich diesen Code in meinem Sub starte, wird mir der Laufzeitfehler 1004 angezeigt.

Anzeige
Dann so, Coco:
08.04.2016 14:16:19
Luc:-?

With Sheets("Tabelle39").Cells(6, 4)
If .Value = CVErr(xlErrValue) Then _
.FormulaArray = .FormulaR1C1
End With
Luc :-?

Einfache Fmln, die eigentlich MatrixFmln ...
08.04.2016 15:21:49
Luc:-?
…sein müssten, neigen aber eher dazu, ein falsches Ergebnis anstelle von #WERT! auszuweisen, wenn sie in einer der Zeilen (bzw Spalten) ihres Bezugsbereichs notiert wdn. In diesem Fall wäre es angebracht, auch das noch abzudecken. Deshalb habe ich mal ein KomplettPgm für einen ganzen ZellBereich mit derartigen Fmln entwickelt:
Sub TestMxFml()
Const naRelBlatt$ = "Tabelle39", adRelBereich$ = "D2:D20" '    Dim xZ As Range
For Each xZ In Sheets(naRelBlatt).Range(adRelBereich)
If xZ.HasFormula Then
If IsError(xZ) Then
If xZ = CVErr(xlErrValue) Then xZ.FormulaArray = xZ.FormulaR1C1
ElseIf xZ  Sheets(naRelBlatt).Evaluate(xZ.Formula) Then
xZ.FormulaArray = xZ.FormulaR1C1
End If
End If
Next xZ
End Sub
Luc :-?
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige