John noticed that Excel provides three ways to concatenate values: Using the & operator, the CONCATENATE function, and the new CONCAT function. He wonders about the differences between these various ways of putting together values and which is the best to use.

Actually, there is another new function (TEXTJOIN) which could also be used to concatenate values. This means that Excel now has four different ways to pull values together into a string.

Before explaining the differences, though, it may be best to define what is meant by "new" when, in this case, discussing "new functions." Specifically it means that the new functions are available to those using Excel 2016 if that version of Excel is based on an Office 365 subscription. This means that if you have Excel 2016 that is standalone, you won't have access to either CONCAT or TEXTJOIN. You only get them with the subscription. If you have an Office 365 subscription and you cannot use CONCAT or TEXTJOIN, you'll want to check for updates and make sure you are updated to the latest version—these two functions have been available since February 2016.

Now for the traditional methods of combining values: There is very little difference between using the & operator or the CONCATENATE function. The biggest theoretical difference is that the CONCATENATE function has a limit of 255 parameters that can be used with it, and the & operator does not. (I say "theoretical" because you've got to do a LOT of work to use 255 parameters with CONCATENATE.) Personally, I prefer to use the & operator for no other reason than it takes less time to type and is clearer to me than the function approach.

The CONCAT function does the traditional approaches one better, so to speak: It allows you to use ranges as parameters. This is actually pretty cool; consider the following usage:

=A1 & A2 & A3 & A4

Pretty straightforward, right? Well, with CONCAT you could simplify to this:

=CONCAT(A1:A4)

It becomes even better if you want to use a rectangular area. The old way is this:

=A1 & A2 & A3 & A4 & B1 & B2 & B3 & B4

Here's how to do it with CONCAT:

=CONCAT(A1:A4, B1:B4)

If you modified this a bit, you can easily combine the values by row within the range:

=CONCAT(A1:B4)

This is equivalent to the following:

=A1 & B1 & A2 & B2 & A3 & B3 & A4 & B4

Now, let's throw the TEXTJOIN function into the mix. This function adds two required parameters before the list of cells or ranges of cells you want to concatenate. These parameters allow you to add both a delimiter and indicate if empty cells should be ignored. Here's an example:

=TEXTJOIN(" ", TRUE, A1:B4)

In this usage, the function automatically adds a space character between each cell value that it concatenates. The delimiter isn't limited to a single character; you could use multiple characters. This sure beats the old way of doing it:

=A1 & " " & B1 & " " & A2 & " " & B2 & " " & A3 & " " & B3 & " " & A4 & " " & B4

The second TEXTJOIN parameter, set to TRUE in this example, indicates whether or not you want to skip blank cells in the ranges you are concatenating. This is really impossible to do with any other concatenation approach, and it makes the TEXTJOIN function very powerful. Plus, it gets rid of "double delimiters" as it truly only includes one delimiter between each value it adds to the resultant string.

Which of these four methods should you use to concatenate your values? It's up to you, but if you are developing workbooks that will be used by those with older versions of Excel, I'd suggest sticking to the & operator or the CONCATENATE function. If, however, you are pretty sure that those using the workbook will always have the latest version of Excel, then I'd blow right past CONCAT and use the TEXTJOIN function almost entirely.

*ExcelTips* is your source for cost-effective Microsoft Excel training.
This tip (4629) applies to Microsoft Excel 2007, 2010, 2013, and 2016.

**Program Successfully in Excel!** John Walkenbach's name is synonymous with excellence in deciphering complex technical topics. With this comprehensive guide, "Mr. Spreadsheet" shows how to maximize your Excel experience using professional spreadsheet application development tips from his own personal bookshelf. Check out *Excel 2013 Power Programming with VBA* today!

Need to find the absolute value of a number? That's where the ABS function comes into play.

Discover MoreYou may use Excel's trigonometric functions to do some quick calculations, and suddenly notice that the results in your ...

Discover MoreThe MODE function is used to determine the most frequently recurring value in a range. This tip explains how to use the ...

Discover More**FREE SERVICE:** Get tips like this every week in *ExcelTips,* a free productivity newsletter. Enter your address and click "Subscribe."

2019-12-01 08:39:46

Peter Atherton

I missed pointing out that on the first example with the added text "England" this increaded the ayyay to two items, range, and array so LBound(Args) = 0 & UBound(Ags) = 1

Here is anoher based on the first example on the MS help page

(see Figure 1 below)

**Figure 1.** Text & Range

2019-12-01 08:27:49

Peter Atherton

You do not have the TEXTJOIN function if you have the Home version of Excel2016. I have tried to reproduce it in VBA. Here is the function, it has an extra variable to return the values in reverse positions.

Function cTEXTJOIN(Delimeter, ignore_empty, order As Integer, ParamArray Args() As Variant) As Variant

Dim i As Integer, tmpRng As Range, c As Range, n As Integer

Dim str As String, counter 'As Integer

For i = 0 To UBound(Args)

Select Case TypeName(Args(i))

Case "Range"

Set tmpRng = Intersect(Args(i).Parent.UsedRange, Args(i))

counter = UBound(Args()) '.Count)

If order = 0 Then

For Each c In tmpRng

n = tmpRng.Count

counter = counter + 1

If Not ignore_empty And Len(c) = 0 Then

str = str & Delimeter

ElseIf counter = n And Delimeter <> " " And i = UBound(Args()) Then

str = str & c

Else

str = str & c & Delimeter

End If

Next c

ElseIf order <> 0 Then

For Each c In tmpRng

n = tmpRng.Count

counter = counter + 1

If Not ignore_empty And Len(c) = 0 Then

str = Delimeter & c & str

ElseIf counter = n Then

str = c & str

Else

str = Delimeter & c & str

End If

Next c

End If

Case "String"

If i = UBound(Args) And order <> 0 Then

str = Args(i) & str

ElseIf i = UBound(Args) And order = 0 Then

str = str & Args(i)

Else

str = str & Args(i) & Delimeter

End If

Case Else

If i = UBound(Args) Then

str = str & Args(i)

Else

str = str & Args(i) & Delimeter

End If

End Select

Next i

cTEXTJOIN = str

End Function

It seems to work like the MS version

(see Figure 1 below)

**Figure 1.**

Got a version of Excel that uses the
ribbon interface (Excel 2007 or later)?
**This site is for you!** If you
use an earlier version of Excel, visit
our *ExcelTips* site focusing on the menu interface.

**FREE SERVICE:** Get tips like this every week in *ExcelTips,* a free productivity newsletter. Enter your address and click "Subscribe."

Copyright © 2020 Sharon Parq Associates, Inc.

## Comments