复杂的Excel“IF-THEN”理论

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

如果 - 然后有条件的

在这一点上,我只需要知道这是否可以通过嵌套的IF函数(或IF和Match和Index的组合),或者如果VBA会更好。 我担心的是,我会浪费一整天的时间去做一些甚至是不可能的事情,或者花一天的时间去做错误的,不切实际的事情。

干得好:

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

将上述公式input到单元格D2中并向下复制。

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

对于这种情况下,你可以使用

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

它基本上用&符生成所有列。
然后它计算生成的string(因为这里所有的长度都是相等的)并且截断最后的三个字符,这些字符总是&除非所有的值都是-然后它什么也不放(因为它会调用=LEFT("", -3)除此以外。

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

VBA解决scheme如果你想这样做:

 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 

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