我需要检查一下D8手机的价值:
以数字或字母开头,以-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 else M如果以-f结果结尾=F else M
ID和护照都是在D8中获取的,ID仅为数字,护照以字母开头。
发布于 2016-11-18 12:36:12
你的公式不管用,因为你忘了一些()。试试这个
=IF(ISNUMBER(VALUE(LEFT(D8,1))), IF(--MID(D8,7,1)<5,"F","M"),IF(IFERROR(FIND("-F",D8),FALSE),"F","M"))发布于 2016-11-18 13:16:20
如果您对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的包含范围。
https://stackoverflow.com/questions/40677113
复制相似问题