在Excel中重新编码所需的公式

说我有下面的表(VAR代表variables):#

VAR1 VAR2 VAR3 VAR4 OUT 1 1 1 1 VAR4 0 1 1 0 VAR3 1 0 0 0 VAR1 1 1 0 0 VAR2 

因此,每个variables编码为1或0. VAR4的权重大于VAR3,VAR3的权重大于VAR2等。

如果只有一个VAR是1,那么VAR在输出中给出。 但是,如果一个以上的VAR是1,那么输出只是最高权重的VAR,即如果VAR2和VAR4是1,其他0,则输出列将是VAR4。

Excel中的input公式是什么呢?还是有什么快捷的方法呢?

我会说在E7:

 ="VAR" & IF(D7=1,4,IF(C7=1,3,IF(B7=1,2,IF(A7=1,1,0)))) 

其中A是VAR1的列,VAR2的B,VAR3的C以及VAR4的D。 只需将公式放在E列(检查指数;上面的公式是针对行号7(E7))

以下数组公式将完成工作。 请注意,它不要求VAR名称的forms为VAR +数字,也就是说,它将从数据列的第一行中select所需的名称。

 =IFERROR(INDEX($A$1:$D$1,1,IF(SUM(A5:D5)=0,1/0,MAX({1,2,3,4}*A2:D2))),"-") 

ISERROR和1/0捕获所有权重为零的情况,并返回“ – ”而不是VAR名称。 如果所有零权重的情况都不会发生,则公式简化为:

 =INDEX($A$1:$D$1,1,MAX({1,2,3,4}*A2:D2)) 

这个公式将被input到单元格E2中并被复制下来。 由于它是一个数组公式,因此应该使用ControlShiftEnter组合 input

如果表格位于工作表的开始处,请使用以下公式:

 =IF(D2=1,$D$1,IF(C2=1,$C$1,IF(B2=1,$B$1,IF(A2=1,$A$1,0)))) 

这个公式将随着数据的增长而变化,并且允许更多的灵活性:

 =LOOKUP(TRUE,1/$A2:$D2=1,$A$1:$D$1) 

A2:D2 = 1返回每列的TRUE / FALSE数组,如果它包含1 1 / A2:D2 = 1将反转该arrays在倒数组中findTRUE将返回具有第一个(或最后一个,因为它是反过来)匹配是TRUE,并使用该位置的标题。

这个公式不需要数组input,你可以input它作为一个正常的公式

如果所有权重均为0,则公式将返回#N/A