excel 公式中的多个 if 和 or 条件
multile if and or conditions in excel formula
我需要检查如果单元格 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 否则 M
if 以 -f 结尾 result = 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),正则表达式非常适合此类任务,因为它们的可扩展性很强。您当然可以在 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
然后你的公式可以 reader:
=If(Checker(D8), "M", "F")
请注意,正则表达式可以在不转换为数字的情况下确定 "less than 5"——在这种情况下,我们只是表示 0 到 4 的包含范围。
我需要检查如果单元格 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 否则 M if 以 -f 结尾 result = 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),正则表达式非常适合此类任务,因为它们的可扩展性很强。您当然可以在 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
然后你的公式可以 reader:
=If(Checker(D8), "M", "F")
请注意,正则表达式可以在不转换为数字的情况下确定 "less than 5"——在这种情况下,我们只是表示 0 到 4 的包含范围。