根据表的情况来看,不能只是输入一个体重值,而是需要输入3个值:体重,性别,年级,由此我编写了一个函数,使用过程中需要注意以下几点:
1、调用格式:在单元格中输入=BMIScore(25,"F",1),其中25是体重,第二个参数是性别,可输入F或M,第三个参数是年级,用1表示初一,2表示初二
2、代码需要放到excelVBA窗口中,在excel中按alt+F11可打开VBA窗体
3、插入/模块,新创建一个模块,然后将代码复制到该模块中,在此模块中的函数才能在excel中像其他函数一样使用。
以下为具体代码,如果格式不太好看,你可以再见最后的图片:
' 体重指数单项评分函数
Function BMIScore(weight As Double, sex As String, class As Integer) As Integer
Dim result As Integer
Select Case sex
Case "F": ' 性别=女
Select Case class
Case 1: ' 初一
Select Case weight
Case Is <= 14.7
result = 80
Case 14.8 To 21.7
result = 100
Case 21.8 To 24.4
result = 80
Case Is >= 24.5
result = 60
End Select
Case 2: ' 初二
Select Case weight
Case Is <= 15.2
result = 80
Case 15.3 To 22.2
result = 100
Case 22.3 To 24.8
result = 80
Case Is >= 24.9
result = 60
End Select
End Select
Case "M": ' 性别=男
Select Case class
Case 1: ' 初一
Select Case weight
Case Is <= 15.4
result = 80
Case 15.5 To 22.1
result = 100
Case 22.2 To 24.9
result = 80
Case Is >= 25
result = 60
End Select
Case 2: ' 初二
Select Case weight
Case Is <= 15.6
result = 80
Case 15.7 To 22.5
result = 100
Case 22.6 To 25.2
result = 80
Case Is >= 25.3
result = 60
End Select
End Select
End Select
BMIScore = result
End Function
在 Excel 2007 中,可以用以下公式满足题述要求(以所拟表为例):
1. 得分公式:=IF(AND(AND(D2>=15.5,D2<=22.1),B2="男",C2="初一"),100,IF(AND(AND(D2>=15.7,D2<=22.5),B2="男",C2="初二"),100,IF(AND(AND(D2>=14.8,D2<=21.7),B2="女",C2="初一"),100,IF(AND(AND(D2>=15.3,D2<=22.2),B2="女",C2="初二"),100,IF(AND(D2<=15.4,B2="男",C2="初一"),80,IF(AND(D2<=15.6,B2="男",C2="初二"),80,IF(AND(D2<=14.7,B2="女",C2="初一"),80,IF(AND(D2<=14.7,B2="女",C2="初二"),80,IF(AND(D2<=15.2,B2="女",C2="初二"),80,IF(AND(AND(D2>=22.2,D2<=24.9),B2="男",C2="初一"),80,IF(AND(AND(D2>=22.6,D2<=25.2),B2="男",C2="初二"),80,IF(AND(AND(D2>=21.8,D2<=24.4),B2="女",C2="初一"),80,IF(AND(AND(D2>=22.3,D2<=24.8),B2="女",C2="初二"),80,IF(AND(D2>=25,B2="男",C2="初一"),60,IF(AND(D2>=25.3,B2="男",C2="初一"),60,IF(AND(D2>=24.5,B2="女",C2="初一"),60,IF(AND(D2>=24.9,B2="女",C2="初二"),60)))))))))))))))))
2. 等级公式:=IF(AND(AND(D2>=15.5,D2<=22.1),B2="男",C2="初一"),"正常",IF(AND(AND(D2>=15.7,D2<=22.5),B2="男",C2="初二"),"正常",IF(AND(AND(D2>=14.8,D2<=21.7),B2="女",C2="初一"),"正常",IF(AND(AND(D2>=15.3,D2<=22.2),B2="女",C2="初二"),"正常",IF(AND(D2<=15.4,B2="男",C2="初一"),"低体重",IF(AND(D2<=15.6,B2="男",C2="初二"),"低体重",IF(AND(D2<=14.7,B2="女",C2="初一"),"低体重",IF(AND(D2<=14.7,B2="女",C2="初二"),"低体重",IF(AND(D2<=15.2,B2="女",C2="初二"),"超重",IF(AND(AND(D2>=22.2,D2<=24.9),B2="男",C2="初一"),"超重",IF(AND(AND(D2>=22.6,D2<=25.2),B2="男",C2="初二"),"超重",IF(AND(AND(D2>=21.8,D2<=24.4),B2="女",C2="初一"),"超重",IF(AND(AND(D2>=22.3,D2<=24.8),B2="女",C2="初二"),"超重",IF(AND(D2>=25,B2="男",C2="初一"),"肥胖",IF(AND(D2>=25.3,B2="男",C2="初一"),"肥胖",IF(AND(D2>=24.5,B2="女",C2="初一"),"肥胖",IF(AND(D2>=24.9,B2="女",C2="初二"),"肥胖")))))))))))))))))
注1:上述“得分公式”与“等级公式”结构完全相同,只是因为“得分”与“等级”的对应关系有重复项,所以采用了这种方式
注2:这是个“吓人”的公式,利用 IF 函数应对这么多的条件,的确够“吓人”
公式的结果如下图示: