I am trying to get a formula that searches each row for a "Yes". It then should list the column name(s). Some row may only have 1 yes, some may have 3 or more. I have tried searching and editing several suggestions, but cannot get the one I need. Some formulas will give me a random column name, and only 1. Other just error out.
Header 1 Header 2 Header 3 Header 4 List
No Yes Yes No Header 2, Header 3
Yes No Yes Yes Header 1, Header 3, Header 4
No No No Yes Header 4
Yes Yes No Yes Header 1, Header 2, Header 4
You can use the following UDF:
Function TEXTJOIN(delim As String, skipblank As Boolean, arr)
Dim d As Long
Dim c As Long
Dim arr2()
Dim t As Long, y As Long
t = -1
y = -1
If TypeName(arr) = "Range" Then
arr2 = arr.Value
Else
arr2 = arr
End If
On Error Resume Next
t = UBound(arr2, 2)
y = UBound(arr2, 1)
On Error GoTo 0
If t >= 0 And y >= 0 Then
For c = LBound(arr2, 1) To UBound(arr2, 1)
For d = LBound(arr2, 1) To UBound(arr2, 2)
If arr2(c, d) <> "" Or Not skipblank Then
TEXTJOIN = TEXTJOIN & arr2(c, d) & delim
End If
Next d
Next c
Else
For c = LBound(arr2) To UBound(arr2)
If arr2(c) <> "" Or Not skipblank Then
TEXTJOIN = TEXTJOIN & arr2(c) & delim
End If
Next c
End If
TEXTJOIN = Left(TEXTJOIN, Len(TEXTJOIN) - Len(delim))
End Function
Put it in a module attached to the worksheet.
Then you would call it like any other formula with the following array formula:
=TEXTJOIN(",",TRUE,IF(A2:D2="Yes",$A$1:$D$1,""))
Being an array it needs to be confirmed with Ctrl-Shift-Enter instead of Enter when exiting edit mode. If done correctly then Excel will put {}
around the formula.
To get it with IF formulas this will return the same thing, since you only have four. If you have more than four this would get quite long.
=LEFT(IF(A2="Yes",$A$1 & ",","") & IF(B2="Yes",$B$1 & ",","") & IF(C2="Yes",$C$1 & ",","") & IF(D2="Yes",$D$1 & ",",""),LEN(IF(A2="Yes",$A$1 & ",","") & IF(B2="Yes",$B$1 & ",","") & IF(C2="Yes",$C$1 & ",","") & IF(D2="Yes",$D$1 & ",",""))-1)