如何用数组公式判断值是否存在于表头指定列中?
问题:生成数组公式判断值是否存在于对应类别列中
我需要为表格的「是否存在?」列生成公式:若「值」列内容存在于「类别」列值对应的表头列中,则显示「Y」,否则显示「N」。
单个单元格可正常使用的公式:
=if($A2="","",iferror(if(MATCH($B2,index($D$1:$F,,MATCH($A2,$D$1:$F$1,0)),0),"Y"),"N"))
但尝试在C1单元格使用以下数组公式时无法生效:
={"Found?"; ARRAYFORMULA(if($A2:$A="","",iferror(if(MATCH($B2:$B,index($D$1:$F,,MATCH($A2:$A,$D$1:$F$1,0)),0),"Y"),"N")))}
对应表格:
| 类别 | 值 | 是否存在? | 颜色 | 尺寸 | 口味 |
|---|---|---|---|---|---|
| Colors | Black | Y | Blue | Small | Strawberry |
| Colors | Blue | Y | Red | Medium | Chocolate |
| Colors | Green | Y | Orange | Large | Vanilla |
| Colors | Orange | Y | Yellow | Extra Large | Peach |
| Colors | Pink | N | Green | Orange | |
| Colors | Red | Y | White | ||
| Colors | Violet | N | Black | ||
| Colors | White | Y | |||
| Colors | Yellow | Y | |||
| Sizes | Extra Large | Y | |||
| Sizes | Large | Y | |||
| Sizes | Medium | Y | |||
| Sizes | Small | Y | |||
| Flavors | Blueberry | N | |||
| Flavors | Caramel | N | |||
| Flavors | Chocolate | Y | |||
| Flavors | Coconut | N | |||
| Flavors | Lime | N | |||
| Flavors | Orange | Y | |||
| Flavors | Peach | Y | |||
| Flavors | Pecan | N | |||
| Flavors | Pineapple | N | |||
| Flavors | Strawberry | Y | |||
| Flavors | Vanilla | Y | |||
| Flavors | Watermelon | N |
可行的C1单元格数组公式
={"是否存在?"; ARRAYFORMULA(BYROW(A2:A, B2:B, LAMBDA(category, value, IF(category="","", IFERROR(IF(MATCH(value, INDEX(D:F,, MATCH(category, D1:F1, 0)), 0), "Y"), "N")))))}
问题原因说明
原数组公式失效的核心问题:MATCH($A2:$A,$D$1:$F$1,0)返回的是一个数组,但INDEX($D$1:$F,, 数组)无法按行对应返回不同列,只会取数组第一个元素对应的列,导致所有行都匹配同一列数据,结果错误。
使用BYROW逐行处理每一对(类别,值),让INDEX每次都获取当前行类别对应的正确列,再用MATCH判断值是否存在,即可实现需求。
内容的提问来源于stack exchange,提问作者Michael Swarts
相关产品推荐
相关产品推荐

