multile如果和或在excel公式条件

我需要检查如果单元格D8的值:

以数字或字母开头,以-f或-m结尾

那么,如果序列中的第七位数字小于5,但是只有它实际上以数字开头,如果它以字母开头,则必须检查结尾-f或-m部分。

这是我有什么:

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

编辑:如果从数字开始,然后检查数字7是否<5,如果以字母开头,请查看值是否以-f或-m结尾

如果数字7 <5结果= F否则M如果以-f结果= F else M结尾

身份证和护照都在D8中被捕获,身份证仅为数字,护照以字母开头。

你的公式不起作用,因为你忘了一些()。 试试这个

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

如果您打开UDF(使用VBA),正则expression式对于这种types的任务非常好,因为它们具有很高的可扩展性。 你肯定可以在Excel中做到这一点,但是你的function已经很难阅读了,并不是那么复杂。 如果您开始添加或更改条件,则括号内的简单错位可能会使所有内容出轨。

UDF易于读取,写入,debugging和维护。 这是一个使用正则expression式引擎的例子:

 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 

然后你的公式可以读者:

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

请注意,正则expression式可以确定“小于5”而不转换为数字 – 在这种情况下,我们只是说0到4的包含范围。