84

E.g

A1:I A2:am A3:a A4:boy 

I want to merge them all to a single cell "Iamaboy"
This example shows 4 cells merge into 1 cell however I have many cells (more than 100), I can't type them one by one using A1 & A2 & A3 & A4 what can I do?

2
  • Are they all in vertical groups of 4? or do you want all of column A in a single cell? Commented Nov 15, 2011 at 12:03
  • Can we edit this question to have Excel-VBA tag as well, given the accepted answer in VBA? Plus there are questions like this being asked all the time and I would like to mark those as duplicates since there's an answer here. Commented Jun 2, 2015 at 13:14

10 Answers 10

151

If you prefer to do this without VBA, you can try the following:

  1. Have your data in cells A1:A999 (or such)
  2. Set cell B1 to "=A1"
  3. Set cell B2 to "=B1&A2"
  4. Copy cell B2 all the way down to B999 (e.g. by copying B2, selecting cells B3:B99 and pasting)

Cell B999 will now contain the concatenated text string you are looking for.

Sign up to request clarification or add additional context in comments.

4 Comments

If you want to copy the value :- Copy (ctrl+c) the last cell(B999), click on a empty cell and on the Home tab, in the Clipboard group, under the Paste icon, click Paste Values.
This is wasteful, but kind of brilliant!
This is not wasteful at all for a one-time job (which such questions usually are). It is the way to go because it allows you to see what is going on, plus you can further modify the joining operation easily (add separators etc). For one-time jobs, VBA is like cracking a nut using a sledgehammer.
This is not working with large data sets. (Out of Memory)
88

I present to you my ConcatenateRange VBA function (thanks Jean for the naming advice!) . It will take a range of cells (any dimension, any direction, etc.) and merge them together into a single string. As an optional third parameter, you can add a seperator (like a space, or commas sererated).

In this case, you'd write this to use it:

=ConcatenateRange(A1:A4) 

Function ConcatenateRange(ByVal cell_range As range, _ Optional ByVal separator As String) As String Dim newString As String Dim cell As Variant For Each cell in cell_range If Len(cell) <> 0 Then newString = newString & (separator & cell) End if Next If Len(newString) <> 0 Then newString = Right$(newString, (Len(newString) - Len(separator))) End If ConcatenateRange = newString End Function 

12 Comments

This is uneccessary, while functional simply adding an = A1&A2&A3&A4 would suffice and adding A1&" "&A2&" "&A3&""&A4 would give you a space between each cell's values.
+1 but I would call it ConcatenateRange! Stupid Excel CONCATENATE function won't accept a range as an input, only a list of individual cells as separate arguments...
Thanks Jean! I have adopted your suggestion! Michael, you missed the point - doing that for hundreds of cells is tedious and pointless.
ALl you have to do is "=CocatenateRange(A1:A10, CHAR(10))" by passing CHAR(10) you are passing the new line character. :)
Great stuff. Modified with Else newString = newString & (separator & Space(1)) as I need to retain fixed width in my resulting string.
|
47

Inside CONCATENATE you can use TRANSPOSE if you expand it (F9) then remove the surrounding {}brackets like this recommends

=CONCATENATE(TRANSPOSE(B2:B19)) 

Becomes

=CONCATENATE("Oh ","combining ", "a " ...) 

CONCATENATE(TRANSPOSE(B2:B19))

You may need to add your own separator on the end, say create a column C and transpose that column.

=B1&" " =B2&" " =B3&" " 

Comments

24

In simple cases you can use next method which doesn`t require you to create a function or to copy code to several cells:

  1. In any cell write next code

    =Transpose(A1:A9) 

Where A1:A9 are cells you would like to merge.

  1. Without leaving the cell press F9

After that, the cell will contain the string:

={A1,A2,A3,A4,A5,A6,A7,A8,A9} 

Source: http://www.get-digital-help.com/2011/02/09/concatenate-a-cell-range-without-vba-in-excel/

Update: One part can be ambiguous. Without leaving the cell means having your cell in editor mode. Alternatevly you can press F9 while are in cell editor panel (normaly it can be found above the spreadsheet)

3 Comments

Whatever this was, this was a neat idea, however it didn't work for me. I assume because my text had lots of special characters in them, it didn't combine them into the right output. I ended up manually typing a1&b1&c1&......
Chris, an odd part in this solution is that you have to stay keep focus on the cell before pressing F9. And by "keep focus" i mean having you editor cursor blinking and being able to Continue typing the text.
Hitting F9 does not work on the Mac version of excel.
16

Use VBA's already existing Join function. VBA functions aren't exposed in Excel, so I wrap Join in a user-defined function that exposes its functionality. The simplest form is:

Function JoinXL(arr As Variant, Optional delimiter As String = " ") 'arr must be a one-dimensional array. JoinXL = Join(arr, delimiter) End Function 

Example usage:

=JoinXL(TRANSPOSE(A1:A4)," ") 

entered as an array formula (using Ctrl-Shift-Enter).

enter image description here


Now, JoinXL accepts only one-dimensional arrays as input. In Excel, ranges return two-dimensional arrays. In the above example, TRANSPOSE converts the 4Ă—1 two-dimensional array into a 4-element one-dimensional array (this is the documented behaviour of TRANSPOSE when it is fed with a single-column two-dimensional array).

For a horizontal range, you would have to do a double TRANSPOSE:

=JoinXL(TRANSPOSE(TRANSPOSE(A1:D1))) 

The inner TRANSPOSE converts the 1Ă—4 two-dimensional array into a 4Ă—1 two-dimensional array, which the outer TRANSPOSE then converts into the expected 4-element one-dimensional array.

enter image description here

This usage of TRANSPOSE is a well-known way of converting 2D arrays into 1D arrays in Excel, but it looks terrible. A more elegant solution would be to hide this away in the JoinXL VBA function.

1 Comment

In large table, this function is much more faster than @aevanko 's function.
9

For those who have Excel 2016 (and I suppose next versions), there is now directly the CONCAT function, which will replace the CONCATENATE function.

So the correct way to do it in Excel 2016 is :

=CONCAT(A1:A4) 

which will produce :

Iamaboy

For users of olders versions of Excel, the other answers are relevant.

2 Comments

I have Office 2016 ProPlus for Windows installed and there is NO CONCAT function
Microsoft says CONCAT is available in Excel 365 and 2019: support.microsoft.com/en-us/office/…
4

For Excel 2011 on Mac it's different. I did it as a three step process.

  1. Create a column of values in column A.
  2. In column B, to the right of the first cell, create a rule that uses the concatenate function on the column value and ",". For example, assuming A1 is the first row, the formula for B1 is =B1. For the next row to row N, the formula is =Concatenate(",",A2). You end up with:
 QA ,Sekuli ,Testing ,Applitools ,Visual Testing ,Test Automation ,Selenium 
  1. In column C create a formula that concatenates all previous values. Because it is additive you will get all at the end. The formula for cell C1 is =B1. For all other rows to N, the formula is =Concatenate(C1,B2). And you get:
 QA,Sekuli QA,Sekuli,Testing QA,Sekuli,Testing,Applitools QA,Sekuli,Testing,Applitools,Visual Testing QA,Sekuli,Testing,Applitools,Visual Testing,Test Automation QA,Sekuli,Testing,Applitools,Visual Testing,Test Automation,Selenium 

The last cell of the list will be what you want. This is compatible with Excel on Windows or Mac.

1 Comment

it is possible to concatenate three values in one formula. I have values in A column, B1 is a copy of A1 and B2 with formula like =CONCATENATE(B1;",";A2). Then you have to drag the right down dot in the cell for all rows and the last value will be the result
2

I use the CONCATENATE method to take the values of a column and wrap quotes around them with columns in between in order to quickly populate the WHERE IN () clause of a SQL statement.

I always just type =CONCATENATE("'",B2,"'",",") and then select that and drag it down, which creates =CONCATENATE("'",B3,"'",","), =CONCATENATE("'",B4,"'",","), etc. then highlight that whole column, copy paste to a plain text editor and paste back if needed, thus stripping the row separation. It works, but again, just as a one time deal, this is not a good solution for someone who needs this all the time.

Comments

1

I know this is really a really old question, but I was trying to do the same thing and I stumbled upon a new formula in excel called "TEXTJOIN".

For the question, the following formula solves the problem

=TEXTJOIN("",TRUE,(a1:a4)) 

The signature of "TEXTJOIN" is explained as TEXTJOIN(delimiter,ignore_empty,text1,[text2],[text3],...)

1 Comment

Microsoft says TEXTJOIN is available for Excel 365 and 2019: support.microsoft.com/en-us/office/…
0

I needed a general purpose Concatenate With Separator (since I don't have TEXTJOIN) so I wrote this:

Public Function ConcatWS(separator As String, ParamArray cell_range()) As String '---concatenate with seperator For n = LBound(cell_range) To UBound(cell_range) For Each cell In cell_range(n) If Len(cell) <> 0 Then ConcatWS = ConcatWS & IIf(ConcatWS <> "", separator, "") & cell End If Next Next n End Function 

Which allows us to go crazy with flexibility in including cell ranges:

=ConcatWS(" ", Fields, E1:G2, L6:M9, O6) 

NOTE: "Fields" is a Named Range and the separator may be blank

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.