系统:Windows 7
软件:Excel 2010
- 本文讲解如何查找满足条件的n个结果
动图展示
Part 1:示例
- 有5个学员参加社团面试,同时也有5个评委。因为评委很忙,有些评委来的比较晚,有些有其它安排得提前离开,他们只评价了部分学员,具体评价结果如下图(评委任性)
- 每位学员的最终得分,为所有对其评价的评委打分的均分(如果有5个评委评价,则得分为5位均分;如果只有3个评价,那么得分为3位的均分)
评价信息e
最终得分
Part 2:如何实现
- 因为想将其整成一种通用的计算方式,即不管几个学员,几个评委,评委如何打分,都适用的程序
- 实现想到的是
vlookup
和match
函数,但是尴尬的是他们只能匹配第一个匹配的数据,那么怎么办? - 这里提供一个比较笨的方法,遍历查找
Part 3:代码
Sub 计算均分()
Set sht = ThisWorkbook.Worksheets("示例")
maxRowOp = sht.Cells(Rows.Count, "F").End(xlUp).Row
maxRowSearch = sht.Cells(Rows.Count, "B").End(xlUp).Row
For i = 2 To maxRowOp Step 1
aimName = sht.Cells(i, "F")
inputCol = 8
For k = 2 To maxRowSearch Step 1
searchName = sht.Cells(k, "B")
If aimName = searchName Then
noteK = sht.Cells(k, "C")
sht.Cells(i, inputCol) = noteK
inputCol = inputCol + 1
End If
Next k
'计算均分
If inputCol > 8 Then '表示有数据输入
Set rngCal = sht.Range(sht.Cells(i, 8), sht.Cells(i, inputCol - 1))
sht.Cells(i, 7) = Round(Application.Average(rngCal), 2)
End If
Next
End Sub
代码截图
Part 4:部分代码解读
sht.Cells(Rows.Count, "B").End(xlUp).Row
,获取打分评价最大行数,每一个评委对每一个学员的打分为一行记录,减少不必要的循环- 本质上是对一个学员,都需要对所有打分记录循环一遍,对于本题来说,共有23个记录,相当于对每个学员,要循环判断23次,合计判断23*5=115。当数据非常大时,这种方法显的非常低效
Ps:各位同学有没有比较简单的方法呢?在百度上搜了下,好像也有一些组合公式之类的
- 如需文中高清并可以无限放大路径图,可以文后留言留下邮箱,小编会发过去
- 本文为原创作品,如需转载,可加小编微信号
learningBin
更多精彩,请关注微信公众号
扫描二维码,关注本公众号