服务热线:18609840880

建站知识

建站知识

您当前位置:首页 > 建站知识

区间查找大揭秘,原来还有此类需求

发布时间:2018-10-11

     近也有很多小伙伴咨询过很多问题,但很多问题基本都是已经解答过的,所以我就挑选了一个没有见过的特殊需求,我在想一般应该也很少有此类需求。和今天要介绍的问题很类似就是从0~59分为Failed,从60~69为D,从70~79为C,从80~89为B,从90~100为A。一般是一列显示区间,如下图所示:

        解决此类问题,可以至少有6个方法。公众号前期介绍了Excel十大函数,就有详细介绍此类问题。但今天要介绍的问题是分开表示,如下图所示:

        通过上图可以看出,该区间给定了起始值和终止值,如果给定一个数字,对应哪个区间,就返回对应的姓名。需要得到的效果如下:

        其实看到这个问题,先进反应就是使用Index+Match进行获取姓名,首先拿上图A列的每一个值和起始值和终止值进行对比,如果能够同时达到要求,就表示该行对应的姓名就是我们需要找的。具体函数公式如下:
{=INDEX(表2!$C$2:$C$8,MATCH(1,(A2>=表2!$A$2:$A$8)*(A2<=表2!$B$2:$B$8),0))}
        该公式是一个数组公式,大括号不是直接输入的,而是通过Ctrl+Shift+Enter得到的,这个就不用多说了吧。其实上面的数组公式重要的就是公式中标红的*,只有当同时符合在起始值和终止值的才符合要求。我们来单步演示一下,详见如下动态图:

        后,解决该问题,怎么能少了VBA呢,其实代码也非常容易,我自定义了一个sutSearch函数,仿照vlookup函数的前三个参数,具体代码如下所示:
 
Function sutSearch(lookValue As Range, tableArray As Range, colIndex As Byte)
    Dim strlookValue As String
    Dim sutArray()
    Dim i As Integer
    strlookValue = lookValue.Value
    sutArray = tableArray
    For i = 1 To UBound(sutArray, 1)
        If strlookValue >= sutArray(i, 1) And strlookValue <= sutArray(i, 2) Then
            sutSearch = sutArray(i, colIndex)
        End If
    Next
End Function
 
        由于编写此代码的时间不超过2分钟,所以并没有考虑任何容错,但至少代码可以正常工作,代码演示如下:

        怎么样?是不是两种方法都相当容易呢?各位小伙伴如果有更加简单的方法,欢迎留言或加入QQ群进行交流哦。

大连新图闻科技有限公司是一家品牌设计服务提供商,企业网络服务品牌,也是企业邮箱“盈世”的大连地区代理商。公司服务项目包括网站建设、平面设计、网络营销推广、商业摄影、企业邮箱等,帮助客户提高企业综合竞争能力。

18609840880(微信同步)

市场部 : 8001@newtwowin.com
业务联系,业务需求请发到此邮箱.

QQ咨询: 94091176
客服部:xxz@newtwowin.com
地址:大连市西安路罗斯福B座3109