excel根据条件返回对应的值比如?

x的属性是(a.b.c.d)y物品的属性是(b.c.d.e)z物品的属性是(a.c.d.f)我现在有条件a. b. c. d. e需要返回x和y如何列公式
假如我有红花,三七,丹参,麝香,以及黄芪,那么我可以合成的材料就有金创膏和活血膏

在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))”这种形式啦

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-06-07

题目表述不够清晰,我就给你估摸这弄了,如果不符合意思再说。

追问

大佬大佬,我需要满足这样的条件

比如金创膏的组成需要红花 三七 黄芪 麝香,现在的材料不仅仅有以上4种,还有丹参,所以我现在就可以合成金创膏和活血膏

追答

增加材料不就是相当于增加行,增加产品不就是相当于增加列吗??
我给你的这个思路没有问题啊。。你只要理解了我给你的这个表格,自己把相应表格调整一下就可以了。

第2个回答  2021-06-08

    把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 数组公式结束输入,公式右拉

第3个回答  2021-06-08
先肯定一下这个是可以做出来的,但是很麻烦。然后是关于这个数据的问题。以我的理解这个本来应该是用来分析的吧,做成这样一点也不规范,建议重新学。
公式我做了个半成品你先用着吧,估计也用不久。
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))),""))
有问题就追问。里面有些参数需要你直接调试因为我不知道你这个表打算做多大。
第4个回答  2021-06-08
用代码的自定义函数