如何在Excel中创建多条件"if"函数?

How to create multi conditions "if" function in Excel?

我假设 x 是我要分析的数字,"y" 是 "male" 或 "female","z" 是年龄组。 x 是一个数字,结果将是 "underweight"、健康“或超重”。但实际上是 BPI 的 x 对于男性和女性来说并不相同。例如,如果 x = 21,则取决于性别和年龄,它将被归类为 "underweight"、"healthy " 或超重。

 Function BAI(x As Integer, y As String, z As Integer) As String


 If x < 21 And y = "female" And 20 <= z <= 39 Then
    BAI = "UNDERWEIGHT"

 Elseif 22 <= x <= 33 And y = "Female" And 20 <= z <= 39 Then
    BAI = "Healthy"

ElseIf 34 <= x <= 38 And y = "Female" And 20 <= z <= 39 Then
    BAI = "overweight"

ElseIf x >= 39 And y = "Female" And 20 <= z <= 39 Then
    BAI = "OBESE"

ElseIf x <= 23 And y = "female" And 40 <= z <= 59 Then
    BAI = "UNDERWEIGHT"

ElseIf 24 <= x <= 35 And y = "female" And 40 <= z <= 59 Then
    BAI = "Healthy"

ElseIf 36 <= x <= 41 And y = "female" And 40 <= z <= 59 Then
    BAI = "Overweight"

ElseIf x >= 42 And y = "female" And 40 <= z <= 59 Then
    BAI = "OBESE"

ElseIf x <= 25 And y = "female" And 60 <= z <= 79 Then
    BAI = "UNDERWEIGHT"

ElseIf 26 <= x <= 38 And y = "female" And 60 <= z <= 79 Then
    BAI = "Healthy"

ElseIf 39 <= x <= 43 And y = "female" And 60 <= z <= 79 Then
    BAI = "Overweight"

ElseIf x >= 44 And y = "female" And 60 <= z <= 79 Then
    BAI = "obese"

ElseIf x <= 8 And y = "male" And 20 <= z <= 39 Then
    BAI = "Underweight"

ElseIf 9 <= x <= 21 And y = "male" And 20 <= z <= 39 Then
    BAI = "Healthy"

ElseIf 22 <= x <= 26 And y = "male" And 20 <= z <= 39 Then
    BAI = "overweight"

ElseIf x >= 27 And y = "male" And 20 <= z <= 39 Then
    BAI = "OBESE"

ElseIf x <= 11 And y = "male" And 40 <= z <= 59 Then
    BAI = "UNDERWEIGHT"

ElseIf 12 <= x <= 23 And y = "male" And 40 <= z <= 59 Then
    BAI = "Healthy"

ElseIf 24 <= x <= 28 And y = "male" And 40 <= z <= 59 Then
    BAI = "Overweight"

ElseIf x >= 29 And y = "male" And 40 <= z <= 59 Then
    BAI = "OBESE"

ElseIf x <= 13 And y = "male" And 60 <= z <= 79 Then
    BAI = "UNDERWEIGHT"

ElseIf 14 <= x <= 25 And y = "male" And 60 <= z <= 79 Then
    BAI = "Healthy"

ElseIf 26 <= x <= 30 And y = "male" And 60 <= z <= 79 Then
    BAI = "Overweight"

 End If

 End Function

根据经过编辑的问题,这是一个新答案。

如果您要走 If-Then-Else 路线,那么我建议将您的逻辑分解成组。我试过了,但我不熟悉你的领域,所以我可能做得不够完美:

  1. 首先,测试此人是男性还是女性。
  2. 其次,测试他们的年龄在哪个范围内。
  3. 第三,测试他们的BPI在哪个范围内。

此外,为了便于阅读,我建议将您的变量重命名为更有意义的名称。我将 "x" 重命名为 "BPI",将 "y" 重命名为 "Gender",将 "z" 重命名为 "Age"。


编辑:对于 case-sensitive "male" 和 "female",我在下面的代码中添加了 UCase 函数。它将字符串转换为全部大写,这允许将其与全部大写的字符串进行比较。例如,"MaLe" 将转换为 "MALE",然后与 "MALE" 进行比较。换句话说,这应该从函数的性别部分中删除 case-sensitivity。

此外,对于可能的空格 before/after 性别,使用 Trim 函数将消除它们。所以,Trim("Male ") 变成 "Male"(没有空格)。


看看下面的内容,看看是否更符合您的要求:

Function BAI(BPI As Integer, Gender As String, Age As Integer) As String
If UCase(Trim(Gender)) = "FEMALE" Then
    If 20 <= Age And Age <= 39 Then
        If BPI <= 21 Then BAI = "UNDERWEIGHT"
        If 22 <= BPI And BPI <= 33 Then BAI = "Healthy"
        If 34 <= BPI And BPI <= 38 Then BAI = "Overweight"
        If BPI >= 39 Then BAI = "OBESE"
    ElseIf 40 <= Age And Age <= 59 Then
        If BPI <= 23 Then BAI = "UNDERWEIGHT"
        If 24 <= BPI And BPI <= 35 Then BAI = "Healthy"
        If 36 <= BPI And BPI <= 41 Then BAI = "Overweight"
        If BPI >= 42 Then BAI = "OBESE"
    ElseIf 60 <= Age And Age <= 79 Then
        If BPI <= 25 Then BAI = "UNDERWEIGHT"
        If 26 <= BPI And BPI <= 38 Then BAI = "Healthy"
        If 39 <= BPI And BPI <= 43 Then BAI = "Overweight"
        If BPI >= 44 Then BAI = "OBESE"
    Else
        BAI = "Error - Age outside acceptable range"
    End If
ElseIf UCase(Trim(Gender)) = "MALE" Then
    If 20 <= Age And Age <= 39 Then
        If BPI <= 8 Then BAI = "UNDERWEIGHT"
        If 9 <= BPI And BPI <= 21 Then BAI = "Healthy"
        If 22 <= BPI And BPI <= 26 Then BAI = "Overweight"
        If BPI >= 27 Then BAI = "OBESE"
    ElseIf 40 <= Age And Age <= 59 Then
        If BPI <= 11 Then BAI = "UNDERWEIGHT"
        If 12 <= BPI And BPI <= 23 Then BAI = "Healthy"
        If 24 <= BPI And BPI <= 28 Then BAI = "Overweight"
        If BPI >= 29 Then BAI = "OBESE"
    ElseIf 60 <= Age And Age <= 79 Then
        If BPI <= 13 Then BAI = "UNDERWEIGHT"
        If 14 <= BPI And BPI <= 25 Then BAI = "Healthy"
        If 26 <= BPI And BPI <= 30 Then BAI = "Overweight"
        If BPI >= 31 Then BAI = "OBESE"
    Else
        BAI = "Error - Age outside acceptable range"
    End If
Else
    BAI = "Error - Choose male or female"
End If
End Function