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