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 的包含范围。