Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1644to1648
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 MIN/MAX mit Bedingung

VBA MIN/MAX mit Bedingung
26.09.2018 16:26:57
Jack
Hallo Zusammen,
ich würde gerne eine Min und Max Formel als VBA umsetzen, leider finde ich dazu nichts was mir konkret weiterhilft.
SPALTEN
(1) In J:J stehen die Begriffe
Max Mustermann
Johann Lichter
Max Mustermann
Frank Schuster
Frank Schuster
Julia Siegel
(2) In J steht der Suchbegriff in der jeweiligen Zeile
Max Mustermann
(3) In S:S stehen die Datumswerte
01.06.2018
05.10.2018
04.04.2018
16.06.2018
31.12.2018
04.09.2018
(4) In T:T soll der jeweilige Min Wert zum Suchbegriff der Zeile ausgegeben werden z.B. J2 = Max Mustermann, dann = 04.04.2018 (nicht 01.06.)
(5) In U:U soll der jeweilige Max Wert zum Suchbegriff der Zeile ausgegeben werden z.B. J2 = Max Mustermann, dann = 01.06.2018 (nicht 04.04.)
FORMEL
=MIN(WENN((($J:$J=$J2));$S:$S))
Das VBA soll den durch die Formel berechneten Wert fix berechnet einsetzen. Es sollen auch mehrere Bedinungen möglich sein z.B. =MIN(WENN((($J:$J=$J2)*($K:$K=$K2));$S:$S))

BISHERIGE FORMEL
Leider aber ohne Bedingungen
For aZ = 2 To Sheets("Output").Range("A" & Rows.Count).End(xlUp).Row
If Worksheets("Output").Cells(aZ, 1) = "" Then
Worksheets("Output").Cells(aZ, 3) = ""
Else: Worksheets("Output").Cells(aZ, 3) = Application.WorksheetFunction.Min(Sheets("Output").Range("S:S"))
End If
Next
Danke im Voraus &
beste Grüße,
Jack

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA MIN/MAX mit Bedingung
26.09.2018 17:03:25
Daniel
Hi
am besten ist hier wahrscheinlich, die Formeln in die Zellen zu schreiben und dann die Formeln durch die Werte zu ersetzen.
Da es Matrixformeln sind (Eingabe in die Zelle mit STRG+SHIFT+ENTER), müsstest du mit .FormulaArray die Formeln in die Zellen schreiben.
Oder du baust das ganze auf Formeln mit Aggregat um, denn diese kannst du normal mit .Formula oder .FormulaR1C1 in die Zellen schreiben.
Weiterhin ist es empfehlenswert, dann hier nicht mit ganzen Spalten als Zellbezug zu arbeiten, sondern den Zellbereich genau anzugeben, weil Excel in Matrixformeln (auch mit Aggregat) immer alle angegebnen Zellen durchrechnet, das kann dann dauern.
Code könnte so aussehen, ist jetzt aber mangels Beispieldatei nicht getestet.
Sub test()
Dim FO As String
Dim LZ As Long
FO = "=IF(J2="""","""",Aggregate(xx,15,S2:Szzz/((J2:Jzzz=J2)*(K2:Kzzz=K2)),1))"
With Sheets("Output")
LZ = .Cells.SpecialCells(xlCellTypeLastCell).Row
FO = Replace(FO, "zzz", LZ)
With .Range("T2:U" & LZ)
.Columns(1).Formula = Replace(FO, "xx", "15")
.Columns(2).Formula = Replace(FO, "xx", "14")
.Formula = .Value
End With
End With
End Sub
gruß Daniel
Anzeige
AW: VBA MIN/MAX mit Bedingung
26.09.2018 18:09:45
Jack
Hallo Daniel,
danke für die Hilfe. Das hat mich schon mal weiter gebracht.
Ich scheiter noch an Folgendem. Aktuelle VBA
Sub test()
Dim FO As String
Dim LZ As Long
'FO = "=MIN(IF(((C[-10]=RC[-10])),C[-1]))"
Sheets("Tabelle1").Range("t2:t" & "100" + 1).FormulaArray = "=MIN(IF(((C[-10]=RC[-10])),C[-1]))" _
FP = "=max(IF(((C[-11]=RC[-11])),C[-2]))"
'FO = "=IF(J2="""","""",Aggregate(xx,15,S2:Szzz/((J2:Jzzz=J2)*(J2:Jzzz=J2)),1"
With Sheets("Tabelle1")
LZ = .Cells.SpecialCells(xlCellTypeLastCell).Row
'FO = Replace(FO, "zzz", LZ)
With .Range("T2:U" & LZ)
'.Columns(1).FormulaArray = Replace(FO, "xx", "15")
.Columns(2).FormulaArray = Replace(FP, "xx", "14")
'.Formula = .Value
End With
End With
End Sub
Sobald ich jetzt das Array einsetze, gibt er mir zwar den Wert mit {} aus, allerdings setzt er ab diesem Zeitpunkt für jede Zelle die selbe Formel, statt die Zeilen+1 zu setzen.
Mit Array:
T2 = =MIN(WENN(((J:J=J2));S:S))
T3 = =MIN(WENN(((J:J=J2));S:S))
Ohne Array:
T2 = =MIN(WENN(((J:J=J2));S:S))
T3 = =MIN(WENN(((J:J=J3));S:S))
Wenn ich das gelöst habe, klappt es soweit mit deinem Vorgehen, muss dann nur mal die Performance prüfen.
Danke & beste Grüße,
Jack
Anzeige
AW: VBA MIN/MAX mit Bedingung
26.09.2018 19:03:49
Daniel
Hi
Wenn eine Matrixformel in mehrere Zellen schreiben willst, dann musst du die Formel zuerst in EINE Zelle schreiben und dann per Copy/Paste in die anderen Zellen übertragen.
Fügst du die Matrixformel in mehrere Zellen gleichzeitig ein, so bekommst du nicht viele Matrixformeln, sondern eine einzige, bei der Excel dann davon ausgehen, dass es eine Plurale Matrixformel mmitmehreren Ergebnissen ist, welche dann in die markierten Zellen geschrieben werden müssen.
Sowas hast du aber nicht, du hast eine singuläre Matrixformel mit einem Ergebnis.
Gruß Daniel

308 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige