2016-11-18 4 views
0

Je dois vérifier si la valeur de la cellule J8:multile si et ou les conditions dans Excel formule

Commence par un numéro ou une lettre, se termine par -F ou -m

Ensuite, si le 7e chiffre la séquence est inférieure à 5, mais seulement si elle commence effectivement par un nombre, si elle commence par une lettre elle doit vérifier la fin -f ou -m partie ...

Voici ce que j'ai:

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

EDIT: Si le démarrage avec le numéro, puis vérifier si 7 chiffres est < 5, si commencant par, voir si la valeur se termine par -F ou -m

Si le chiffre 7 < 5 result = F autre M si extrémités avec -f résultat = F else M

L'ID et le passeport sont capturés en D8, les ID sont numériques seulement, les passeports commencent par des lettres.

+0

OK, alors quel est votre problème ou question? – quantummind

+0

La formule ne fonctionne pas. Je dois vérifier si elle commence par une lettre puis vérifier la fin -f/-m, si elle commence par un chiffre chiffre 7 si elle est <5, mais maintenant elle vérifie le chiffre 7 indépendamment du fait qu'il commence par une lettre ou pas, donc le résultat est faux. Il s'agit de vérifier si un ID d'étudiant ou un mot de passe, tous deux dans la même cellule, est un homme ou une femme en regardant -f -m pour les lettres et le chiffre 7 pour l'ID –

Répondre

1

Votre formule ne fonctionne pas car vous en avez oublié(). Essayez celui

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

Si vous êtes ouvert à une UDF (en utilisant VBA), les expressions régulières sont vraiment bien pour ce type de tâche, car ils sont très évolutifs. Vous pouvez sûrement le faire depuis Excel, mais votre fonctionnalité est déjà très difficile à lire, et ce n'est pas si complexe. Si vous commencez à ajouter ou à modifier des conditions, le simple déplacement d'un parenthèse pourrait tout faire déraper.

Une fonction UDF est facile à lire, à écrire, à déboguer et à gérer. Voici un exemple, en utilisant le moteur d'expression régulière:

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 

Et votre formule pourrait lecteur:

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

Notez que le regex peut déterminer « moins de 5 » sans conversion en nombre - dans ce cas, nous avons juste dit la gamme inclusive de 0 à 4.