复杂的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)
并根据需要拖动