Function MYCONCATENATE(Delimiter As Variant, ParamArray CellRanges() As Variant) As String
'Formula Example =MYCONCATENATE("_",A1:E1)
Dim Index As Long, Rw As Long, Col As Long, Down As Boolean, rng As Range, Cell As Range
If IsMissing(Delimiter) Then Delimiter = ""
Index = LBound(CellRanges)
Do While Index <= UBound(CellRanges)
If TypeName(CellRanges(Index)) = "Range" Then
Set rng = CellRanges(Index)
If Index < UBound(CellRanges) Then
If TypeName(CellRanges(Index + 1)) <> "Range" Then Down = CellRanges(Index + 1) = "|"
End If
If Down Then
For Col = 0 To rng.Columns.Count - 1
For Rw = 0 To rng.Rows.Count - 1
If Len(rng(1).Offset(Rw, Col).Value) Then
MYCONCATENATE = MYCONCATENATE & Delimiter & rng(1).Offset(Rw, Col)
End If
Next
Next
Index = Index + 1
Else
For Each Cell In Intersect(rng, rng.Parent.UsedRange)
If Len(Cell.Value) Then MYCONCATENATE = MYCONCATENATE & Delimiter & Cell.Value
Next
End If
Else
If CellRanges(Index) = "||" Then
MYCONCATENATE = MYCONCATENATE & Delimiter & "|"
Else
MYCONCATENATE = MYCONCATENATE & Delimiter & CellRanges(Index)
End If
End If
Index = Index + 1
Loop
MYCONCATENATE = Mid(MYCONCATENATE, Len(Delimiter) + 1)
End Function