Frage von Katjes1982, 59

VBA: Verschiedene Formel je Bedingung?

Ich sitze leider schon länger dran aber mittlerweile habe ich ein Brett vor dem Kopf.

Ich versuche meine Frage mal wie folgt zu beschreiben:

Wenn in Spalte P Ein Eintrag Namens "Hans" Vorhanden ist, so soll in Spalte AF eine Formel A hintelegt werden.
Bei anderen Einträgen in Spalte P wird Formel B hinterlegt.

Ich schaffe es, die Formel A einzutragen und sie Funktioniert auch, aber Formel B wird komplett ignoriert, obwohl in Spalte P andere Namens als Hans erscheinen.

'Dim Ende As Long
'ActiveSheet.UsedRange.AutoFilter Field:=16, Criteria1:="HANS"
'Range("AF2").FormulaLocal = "=WENN(HEUTE()-AE2<=40;""OK"";""P"")"
'Ende = Cells.SpecialCells(xlCellTypeLastCell).Row
'Range("AF2").AutoFill Destination:=Range("AF2:AF" & Ende), Type:=xlFillDefault

'ActiveSheet.UsedRange.AutoFilter Field:=16, Criteria1:="<>HANS"
'Range("AF2").FormulaLocal = "=WENN(HEUTE()-AE2<=30;""OK"";""P"")"
'Ende = Cells.SpecialCells(xlCellTypeLastCell).Row
'Range("AF2").AutoFill Destination:=Range("AF2:AF" & Ende), Type:=xlFillDefault

Vorab lieben Dank und

Viele Grüße

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Ninombre, Community-Experte für Excel, 30

Wenn ich es richtig interpretiere sollen alle Einträge geprüft werden und die entsprechende Formel hinterlegt werden. Ich denke, das wäre einfacher mit einer for-schleife zu lösen.

Grob gesagt so:

For i = 1 To 100 '1 die erste Zeile, 100 die letzte -> noch anpassen an deine tabelle
If Cells(i, 16).Value = "Hans" Then 'angabe der spalte bei cells nummerisch 16=p
Cells(i, 32).FormulaLocal = "=WENN(HEUTE()-AE2<=40;""OK"";""P"")"
Else: If Cells(i, 16).Value <> "" Then Cells(i, 32).FormulaLocal = "=WENN(HEUTE()-AE2<=30;""OK"";""P"")"
End If
Next

Soll der Zellbezug in den Formeln immer AE2 sein oder sich auch mit der jeweiligen Zeile, die geprüft wird, erhöhen?

Kommentar von Katjes1982 ,

Schonmal vielen Dank :)
Der Zellbezug soll mit der jeweiligen Zeile geprüft werden also P2 und AF2. P3 und AF3 etc etc etc :)

Kommentar von Ninombre ,

Dann muss da auch die Variable i rein:

For i = 2 To 100 '1 die erste Zeile, 100 die letzte -> noch anpassen an deine tabelle
If Cells(i, 16).Value = "Hans" Then
Cells(i, 32).FormulaLocal = "=WENN(HEUTE()-AE" & i & "<=40;""OK"";""P"")"
Else: If Cells(i, 16).Value <> "" Then Cells(i, 32).FormulaLocal = "=WENN(HEUTE()-AE" & i & "<=30;""OK"";""P"")"
End If
Next
Kommentar von Katjes1982 ,

PERFEKT :) Ich habe deinen Code angepasst und getestet und er macht, was er soll! Super für die megaschnelle Hilfe!!! Danke!

Expertenantwort
von Iamiam, Community-Experte für Excel, 14

warum verwendest Du ein Makro?

=wenn(P1="Hans";FormelA;FormelB) und das runterziehen

Soll nicht links daneben in derselben Zeile nach Hans gesucht werden, sondern die gesamte Spalte auf Hans geprüft werden (zwar unwahrscheinlich, aber denkbar), dann

=Wenn(Zählenwenn(P:P;"Hans")>0;FormelA;FormelB)

Und wenn nicht das isolierte Hans gemeint ist, sondern auch Hans-Peter, Johansen, Meierhans registriert werden soll, dann in den Formeln anstatt "Hans" mit Wildcards: auf "*Hans*".referenzieren.

Alle Formeln unterscheiden nicht zwischen Groß/Klein. Wenn das gewünscht sein sollte, gehts etwas komplizierter auch, zB:

=Wenn(Summenprodukt(nicht(istfehler(finden("Hans";P:P;1))))>0;FormelA;FormelB)

Findet auch Hans-Peter, aber nicht Meierhans etc. Müsste man für ähnliche Anforderungen noch ertwas erweitern (Für den isolierten Hans zB mit Länge(...), aber es geht alles mit Formeln!

Expertenantwort
von Suboptimierer, Community-Experte für Excel, 31

Scheint mir auf dem ersten Blick nicht unmöglich.

Kommentar von Katjes1982 ,

Ich musste den Langtext überarbeiten. Die korrekte und ausformulierte Frage steht nun bereit.

Kommentar von Suboptimierer ,

Ich dachte schon ;)

Ich schau gleich mal...

Kommentar von Katjes1982 ,

Danke :) Brauchst Dir jedoch keine Mühe mehr zu machen, meine Frage wurde soeben beantwortet.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten