# Concatenating Ranges of Cells

Excel provides one workbook function and one operator that both have the same purpose-to combine strings into a longer string. The CONCATENATE function and the ampersand (&) operator have essentially the same purpose.

Many people use the ampersand operator in preference to the CONCATENATE function because it requires less typing, but CONCATENATE would become immensely more valuable if it would handle a range of cells. Unfortunately it does not, but you can create your own user-defined function that will concatenate every cell in a range very nicely. Consider the following macro:

```Function Concat1(myRange As Range, Optional myDelimiter As String)
Dim r As Range

For Each r In myRange
Concat1 = Concat1 & r & myDelimiter
Next r
If Len(myDelimiter) > 0 Then
Concat1 = Left(Concat1, Len(Concat1) - Len(myDelimiter))
End If
End Function
```

This function requires a range and provides for an optional delimiter. The last “If” statement removes the final trailing delimiter from the concatenated string. With the CONCAT1 function, cells can be added and deleted within the range, without the maintenance required by CONCATENATE or ampersand formulas. All you need to do is call the function in one of the following manners:

```=CONCAT1(C8:E10)
=CONCAT1(C8:E10,"|")
```

The second method of calling the function uses the optional delimiter, which is inserted between each of the concatenated values from the range C8:E10. There is a problem with this, however: If a cell in that range is empty, then you can end up with two sequential delimiters. If you prefer to have only a single delimiter, then you need to make one small change to the function:

```Function Concat2(myRange As Range, Optional myDelimiter As String)
Dim r As Range

For Each r In myRange
If Len(r.Text) > 0 Then
Concat2 = Concat2 & r & myDelimiter
End If
Next r
If Len(myDelimiter) > 0 Then
Concat2 = Left(Concat2, Len(Concat2) - Len(myDelimiter))
End If
End Function
```