查找满足条件的n个结果

微信公众号原文

系统:Windows 7
软件:Excel 2010

  • 本文讲解如何查找满足条件的n个结果

动图展示
1.gif

Part 1:示例

  1. 有5个学员参加社团面试,同时也有5个评委。因为评委很忙,有些评委来的比较晚,有些有其它安排得提前离开,他们只评价了部分学员,具体评价结果如下图(评委任性)
  2. 每位学员的最终得分,为所有对其评价的评委打分的均分(如果有5个评委评价,则得分为5位均分;如果只有3个评价,那么得分为3位的均分)

评价信息e
1.png

最终得分
2.png

Part 2:如何实现

  1. 因为想将其整成一种通用的计算方式,即不管几个学员,几个评委,评委如何打分,都适用的程序
  2. 实现想到的是vlookupmatch函数,但是尴尬的是他们只能匹配第一个匹配的数据,那么怎么办?
  3. 这里提供一个比较笨的方法,遍历查找

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

代码截图
3.png

Part 4:部分代码解读

  1. sht.Cells(Rows.Count, "B").End(xlUp).Row,获取打分评价最大行数,每一个评委对每一个学员的打分为一行记录,减少不必要的循环
  2. 本质上是对一个学员,都需要对所有打分记录循环一遍,对于本题来说,共有23个记录,相当于对每个学员,要循环判断23次,合计判断23*5=115。当数据非常大时,这种方法显的非常低效

Ps:各位同学有没有比较简单的方法呢?在百度上搜了下,好像也有一些组合公式之类的


  • 如需文中高清并可以无限放大路径图,可以文后留言留下邮箱,小编会发过去
  • 本文为原创作品,如需转载,可加小编微信号learningBin

更多精彩,请关注微信公众号
扫描二维码,关注本公众号

公众号底部二维码.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值