我有一个关于IF函数局限性的复杂Excel理论问题。我有4列(3列输入值,1列输出结果)。
此时,我只需要通过嵌套IF函数(或IF和Match和Index的组合)或VBA是否更好来了解这是否可行。我担心的是,我会浪费一整天的时间来尝试做一些甚至不可能做到的事情,或者花一天时间去做错误的,不切实际的事情。
答案 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)
并根据需要向下拖动