返回唯一的列标题匹配条件

时间:2018-09-13 13:28:05

标签: excel excel-formula

请考虑以下数据:

| 1st | 2nd | A | B | C | D | E | F | G | H |
|-----|-----|---|---|---|---|---|---|---|---|
| y   | x   |   |   | 1 |   |   |   |   |   |
| y   | x   |   |   | 1 |   |   |   |   |   |
| y   | x   |   |   |   | 1 |   |   |   |   |
|     | x   | 1 |   |   |   |   |   |   |   |
| y   |     | 1 | 1 | 1 |   |   |   |   |   |
| y   | x   |   |   |   |   |   | 1 |   |   |
| y   |     |   |   |   |   |   |   | 1 |   |
|     | x   |   |   |   |   | 1 |   |   |   |
|     | x   |   |   |   |   |   |   |   | 1 |
| y   | x   |   |   |   |   |   |   |   | 1 |

我希望做的是返回满足以下条件的所有列标题(从A到H):它的值应为1,且都与yx对齐前两列的值。

我已经有一个有效的数组公式可以执行此操作,如下所示:

{=INDEX($C$1:$J$1,SMALL(IF(($A$2:$A$11="y")*($B$2:$B$11="x")*($C$2:$J$11=1),COLUMN($C$1:$J$1)-COLUMN($B$1)),ROW(1:1)))}

但是,当我将其向下拖动时,它会返回two C values and one for D, F and H

这是因为在标头C下有两个满足上述条件的1。我想要的是返回唯一值,因此C仅应返回一次。我尝试使用MATCH和附加的COUNTIF而不是SMALL函数,但是它返回一个错误,Excel的“求值公式”功能没有帮助。下面是我尝试过的错误公式:

{=INDEX($C$1:$J$1,MATCH(0,IF(($A$2:$A$11="y")*($B$2:$B$11="x")*($C$2:$J$11=1),COUNTIF($N$1:N1,COLUMN($C$1:$J$1)-COLUMN($B$1))),0))}

我当前正在执行的解决方法是将第一个公式设为“帮助列”,然后根据第一个公式的结果创建另一个公式,以仅返回唯一值。但是,由于我要处理的数据量很大,双数组公式严重影响了Excel的计算效率。

任何帮助/建议都可以(请不要使用VBA,因为我认为这里不需要)。谢谢!

2 个答案:

答案 0 :(得分:0)

插入帮助行。我是在您数据之前的标题行下完成此操作的。在此行中,检查是否有一个1与x和y对齐。我认为这不是空白,但是如果特定值将公式从<>“”更改为=“ y”或= 134(视情况而定)。在您感兴趣的第一个列标题下放置以下公式,然后直接复制。

=--(0<SUMPRODUCT(($B$3:$B$12<>"")*($C$3:$C$12<>"")*(D3:D12=1)))

然后,您要在没有空格的列中生成列表,并按照标题从左到右的出现顺序进行排序,请使用以下公式并根据需要向下复制:

=IFERROR(INDEX($1:$1,AGGREGATE(15,6,COLUMN($D$2:$K$2)/$D$2:$K$2,ROW(A1))),"")

如果您将公式复制到适用列数以下,则当没有适用列标题时,上述公式将为空白值。

以上公式基于以下概念证明图像。调整范围以适合您的需求。

POC

答案 1 :(得分:-1)

您是否尝试过不使用数组公式?我不知道实际的数据量是多少。但是,这可能就是您要寻找的东西:

=IF(COUNTIFS($A:$A,"y",$B:$B,"x",C:C,1)>0,C1,"")

假定列A为“第一”,而“ H”为您在列J的最后一列。尝试将公式粘贴到“ K1”并将其向右拖动直到“ S1”。

enter image description here

相关问题