2016-11-18 5 views
0

ich überprüfen müssen, wenn Zelle D8 Wert:multile wenn und oder Bedingungen in Excel Formel

beginnt mit einer Zahl oder einem Buchstaben, endet mit -f oder -m

Dann, wenn die 7. Stelle in die Reihenfolge ist weniger als 5, aber nur wenn es tatsächlich mit einer Zahl beginnt, wenn es mit einem Buchstaben beginnt, muss es die Endung -f oder - m Teil prüfen ...

Hier ist, was ich habe:

=IF(ISNUMBER(VALUE(LEFT(D8,1), IF(--MID(D8,7,1)<5,"F","M"),IF(IFERROR(FIND("-F",D8),FALSE),"F","M")) 

EDIT: Wenn Start mit Nummer, dann prüfen, ob Ziffer 7 < 5 ist, wenn Anfang mit Buchstaben, ob Wert mit -f endet oder -m

wenn Ziffer 7 < 5 result = F sonst M wenn Ende mit -f Ergebnis = F else M

ID und Passport werden in D8 erfasst, ID ist nur numerisch, Pässe beginnen mit Buchstaben.

+0

OK, also was ist dein Problem oder deine Frage? – quantummind

+0

Die Formel funktioniert nicht. Ich muss prüfen, ob es mit einem Buchstaben beginnt, und dann die Endung -f/-m prüfen, wenn es mit einer Zahl beginnt und die Zahl 7 prüft, wenn es <5 ist, aber jetzt prüft es die Zahl 7, unabhängig davon, ob es mit einem Buchstaben oder beginnt nicht, also ist das Ergebnis falsch. Dies ist zu überprüfen, ob ein Student ID oder Passwort, beide in der gleichen Zelle, männlich oder weiblich ist, indem Sie -f -m für Buchstaben und Ziffer 7 für ID suchen –

Antwort

1

Ihre Formel funktioniert nicht, weil Sie einige() vergessen haben. dieses

=IF(ISNUMBER(VALUE(LEFT(D8,1))), IF(--MID(D8,7,1)<5,"F","M"),IF(IFERROR(FIND("-F",D8),FALSE),"F","M")) 
1

ein Try Wenn Sie zu einem UDF (mit VBA) offen sind, sind Reguläre Ausdrücke für diese Art von Aufgabe wirklich schön, weil sie sehr gut skalierbar sind. Sie können dies sicherlich aus Excel heraus tun, aber Ihr Funktional ist bereits sehr schwer zu lesen, und es ist nicht so komplex. Wenn Sie anfangen, Bedingungen hinzuzufügen oder zu ändern, könnte die einfache Fehlplatzierung einer Klammer alles zum Scheitern bringen.

Ein UDF ist einfach zu lesen, zu schreiben, zu debuggen und zu warten. Hier ist ein Beispiel, mit dem Modul für reguläre Ausdrücke:

Function Checker(R As Range) As Boolean 

    Dim result As Boolean 
    Dim rxStartsLet As New RegExp 
    Dim rxStartsNum As New RegExp 
    Dim rxLessThan5 As New RegExp 

    rxStartsLet.Pattern = "^[A-Za-z]" 
    rxStartsNum.Pattern = "^[0-9]" 
    rxLessThan5.Pattern = "[0-4]" 

    If rxStartsNum.Test(R.Value2) Then 
    result = rxLessThan5.Test(Mid(R.Value2, 7, 1)) 
    ElseIf rxStartsLet.Test(R.Value2) Then 
    result = Right(R.Value2, 2) = "-F" Or Right(R.Value2, 2) = "-M" 
    Else 
    result = False 
    End If 

    Checker = result 

End Function 

Und dann Ihrer Formel könnte Leser:

=If(Checker(D8), "M", "F") 

Beachten Sie, dass der Regex bestimmen kann „weniger als 5“ ohne auf eine Reihe Umwandlung - In diesem Fall haben wir nur den Bereich von 0 bis 4 angegeben.