返回具有条件的行中最右边的值

时间:2016-01-08 02:32:18

标签: excel excel-formula excel-2010 worksheet-function

我有一个可变长度值的列表(列出去可能会转到ValueN,此表将随着时间的推移而扩展)。例如:

Subject  Value1  Value2  Value3  Value4
Sub1     Pass    Fail    Fail
Sub2     Pass    NA
Sub3     Fail    Fail    Fail    Fail
Sub4     NA      NA      NA      NA
Sub5     NA      PASS    NA

我需要创建一个报告最右边通过或失败的新列,并且只报告NA,如果所有列都是NA(没有行将所有列都空白),例如:

Subject  Value1  Value2  Value3  Value4  New Column
Sub1     Pass    Fail    Fail            Fail
Sub2     Pass    NA                      Pass
Sub3     Fail    Fail    Fail    Fail    Fail
Sub4     NA      NA      NA      NA      NA
Sub5     NA      Pass    NA              Pass

我发现了一段时间后的另一篇文章,可以帮助我获得最正确的值(Excel formula to get last entry in a row),但我不知道如何修改逻辑只返回行中的所有值是NA。

这是我用来获得最右边值的公式:

=LOOKUP(2,1/(B2:E2<>""),B2:E2)

我已尝试了多种变体,但如果所有值都是正确的NA,则无法获得仅返回NA的逻辑。

有人可以帮忙吗?

编辑:我已经完成了丢失嵌套IF语句的任务,但是这并没有解决在添加更多列时必须修改整个工作表的问题。如果存在这样的解决方案,我正在寻找一个强大的解决方案。

2 个答案:

答案 0 :(得分:3)

使用AGGREGATE¹ function在空白单元格和 NA 值上抛出错误,同时忽略错误。当{n}有效时,IFERROR function可以覆盖NA值。

在G2 as,

=IFERROR(INDEX(B2:E2, AGGREGATE(14, 6, COLUMN(A:D)/(SIGN(LEN(B2:E2))*(B2:E2<>"NA")), 1)), "NA")

根据需要填写。

sign_len

¹ Excel 2010引入了AGGREGATE function。早期版本不提供。

答案 1 :(得分:1)

此修改应该有效:

=IF(COUNTIF(B2:E2,"NA")=COUNTA(B2:E2),"NA",LOOKUP(2,1/((B2:E2<>"")*(B2:E2<>"NA")),B2:E2))