excel根据条件返回对应的值比如? 30
假如我有红花,三七,丹参,麝香,以及黄芪,那么我可以合成的材料就有金创膏和活血膏 展开
在Excel中,有多个用于查询的函数,可以非常方便地查询需要的数据,但是却没有一个类似countifs多条件计数函数、sumifs多条件求和函数一样的,专门用于多条件查询的函数。但是,我们却可以利用lookup函数来实现多条件查询的功能。
lookup函数有两种使用方式,一种是从单行或单列中查找数据,这种方式叫做向量形式,另一种是从多行多列组成的一个区域中查找数据,叫做数组形式。在实际使用过程中一般都不使用数组形式,而多用 VLOOKUP 或 HLOOKUP来实现区域查找。提供数组形式是为了与其他电子表格程序兼容,这种形式的功能有限。故这种方式本节不予分析,主要来和大家探讨一下从单行或单列中查找数据的这种形式。
先来看看基础语法:
lookup(查找值,查找范围区域,返回值区域)
查找范围区域和返回值区域都必须是单行或单列的区域,且大小必须相同。
如果 LOOKUP 函数找不到“查找值”,则该函数会在查找范围区域中小于或等于“查找值”的最大值进行匹配。如果“查找值” 小于 查找范围区域中的最小值,则 LOOKUP 会返回 #N/A 错误值。
来看看一则基础实例:
以下是商店销售目标达成情况表,需要查找商店3的达成率。
在B13单元格中输入公式:
=LOOKUP(B12,B2:B10,E2:E10)
来看看公式实现的过程,查找的值是B12单元格(商店3),查找的范围是B2:B10(商店名称列),返回值区域是E2:E10(达成率列)。首先,它先再商店名称列中查找商店3,当它找到之后,它就会记住其所在行的位置,然后再去找到达成率列中对应行位置的值(也就是83%)
理解了lookup基础用法,我们再来看如何实现多条件查询。
语法:lookup(1,1/((条件区域1=条件1)*(条件区域2=条件2)),返回值区域)
查找的值:1
查找的范围:1/((条件区域1=条件1)*(条件区域2=条件2))
返回值区域:设定返回值列,
条件可以继续增加,但是一组条件用小括号括起来,各条件之间用“*”连接起来,且条件整体也需要用括号括起来。
下图是商店品类销售表,查找商店2休闲裤的销售金额
在B12单元格中输入公式:
=LOOKUP(1,1/((A2:A7=B10)*(B2:B7=B11)),C2:C7)
以上就是多条件查询的方法。在实际工作中,总有人会有疑问。为什么查找值要写成1,查找范围要写成“1/((条件区域1=条件1)*(条件区域2=条件2))”这种形式?
下面我就用上面的实例来解释一下:
条件1:A2:A7=B10 就是在商品名称列查找商店3。条件2:B2:B7=B11 就是在品类列中查找休闲裤。在公式的计算过程中,如果它找到了对应的值就用1表示,如果不是就用0表示,两组条件就得出了两组数,这是第一步。第二步两组数相乘就得到了新的一组数。第三步,1除以这组数,因为分母不能为0,1/0就会变成错误值,这样就剔除了不符合条件的值,保留符合条件的值.。第四步,再在这组数中查找1, 通过找到1所在的位置,找到对应的返回值区域的值。
通过了解公式的计算过程,你就明白了为什么查找值要写成1,查找范围要写成“1/((条件区域1=条件1)*(条件区域2=条件2))”这种形式啦
把J列当做辅助列,在J3单元格中=IF(SUM((IFERROR(MATCH($A$22:$D$30,$D3:$I3,),0)>0)*(1>0))=4,C3,""),ctrl+shift+enter 数组公式结束输入,公式下拉,J列非空白的项就是可合的药谱名
F22=IFERROR(INDEX($J$1:$J$20,SMALL(IF(LEN($J$1:$J$20)>0,ROW($1:$20),9^99),COLUMN(F1)-5),),"") ,ctrl+shift+enter 数组公式结束输入,公式右拉
公式我做了个半成品你先用着吧,估计也用不久。
F22=TEXTJOIN("/",TRUE,IFERROR(INDEX(C3:C19,IF(IFERROR(FIND(D3:D19,TEXTJOIN("/",TRUE,A22:D29))*FIND(E3:E19,TEXTJOIN("/",TRUE,A22:D29))*FIND(F3:F19,TEXTJOIN("/",TRUE,A22:D29))*FIND(G3:G19,TEXTJOIN("/",TRUE,A22:D29))*1,1)=1,"",ROW(A1:A17))),""))
有问题就追问。里面有些参数需要你直接调试因为我不知道你这个表打算做多大。