复杂的Excel" IF-THEN"理论

时间:2015-10-30 15:50:20

标签: excel vba excel-formula

我有一个关于IF函数局限性的复杂Excel理论问题。我有4列(3列输入值,1列输出结果)。

If-Then Conditional

此时,我只需要通过嵌套IF函数(或IF和Match和Index的组合)或VBA是否更好来了解这是否可行。我担心的是,我会浪费一整天的时间来尝试做一些甚至不可能做到的事情,或者花一天时间去做错误的,不切实际的事情。

3 个答案:

答案 0 :(得分:3)

你走了:

=MID(REPT(" & "&A$1,A2="x")&REPT(" & "&B$1,B2="x")&REPT(" & "&C$1,C2="x"),4,999)

在单元格D2中输入上述公式并向下复制。

注意:这是完全通用的,并使用第1行中的列标题作为输出。

答案 1 :(得分:0)

对于这种情况,您可以使用

=IFERROR(LEFT(IF(A1="x","Col 1 & ","") & 
              IF(B1="x","Col 2 & ","") & 
              IF(C1="x","Col 3 & ",""),
              COUNTIF(A1:C1,"x")*8-3), "")

它基本上使用&符号生成所有Col n字段 然后它计算生成的字符串(因为这里都有相同的长度)并切断最后三个字符,除非所有值都是&,否则它将始终为-,然后它不会放任何东西(因为它会调用{ {1}}否则。

对于支持每列可变长度的更通用的公式,您必须手动计算每个单元格为输出添加的长度。

答案 2 :(得分:0)

VBA解决方案,如果你想这样:

Function RangeResults(rng As Excel.Range) As String

Dim output As String

    For Each cell In rng.Cells
        If cell.Row = rng.Cells(1).Row Then
            output = output & IIf(UCase(cell.Value) = "X", "Col " & cell.Column & " & ", vbNullString)
        End If
    Next

    If Len(output) > 0 Then
        output = Left(output, Len(output) - 3)
    End If

    RangeResults = output

End Function

然后在col D中使用=RangeResults(A2:C2)并根据需要向下拖动