2016-11-18 74 views
0

我需要检查,如果单元格D8的价值条件:multile如果与或Excel公式

开始于一个数字或字母, 使用-f或-m

然后结束。如果第7位在序列小于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别的中号 如果端部与-f结果= F else M

ID和护照都在D8中捕获,ID仅为数字,护照以字母开头。

+0

好的,那么你的问题或问题是什么? – quantummind

+0

该公式不起作用。我需要检查它是否以一个字母开头,然后检查结尾-f/-m,如果它以数字7开头,如果它是<5,但现在它检查数字7,不管它是以字母开头还是以字母开头或不,所以结果是错误的。这是为了检查在同一个单元中的学生ID或密码是男性还是女性,方法是查看-f -m查找字母,查找数字7查看ID –

回答

1

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

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

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

UDF易于读取,写入,调试和维护。下面是一个例子,使用正则表达式引擎:

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") 

注意,正则表达式可以判断“不到5”,无须转换为一个数字 - 在这种情况下,我们只是说0到4的包含范围。