AI Content Creation

How to Combine Text From Multiple Cells in Google Sheets

Four functions can join cells and they behave differently. Here is which one to use, plus the fixes for blank gaps, serial-number dates, line breaks, and whole-column joins.

By FITS TeamJuly 15, 202610 min read

Joining two clean cells takes ten seconds. Joining five columns of real data is where it falls apart.

Blanks leave stray commas. Dates come out as five-digit numbers. Line breaks refuse to show. This guide covers the whole job.

How to Combine Text From Multiple Cells in Google Sheets

Use TEXTJOIN. It takes a separator, a flag that skips empty cells, and the range you want joined.

=TEXTJOIN(", ", TRUE, A2:E2)

For two or three cells, the ampersand is shorter and needs no function: =A2 & " " & B2. Four functions can do this job, and only TEXTJOIN skips blanks. Pick by what breaks in your sheet:

  • Stray commas or double spaces from empty cells: set TEXTJOIN's second argument to TRUE.
  • A date turning into 46248: wrap it in TEXT with an explicit format.
  • Line break not appearing: join with CHAR(10), then turn on Wrap.
  • Needing it on every row: wrap the join in ARRAYFORMULA instead of dragging.
  • A whole column into one cell: point TEXTJOIN at an open range like A2:A.

CONCAT vs CONCATENATE vs the Ampersand vs TEXTJOIN

Google Sheets gives you four ways to join text. They are not interchangeable, and three of them cannot skip a blank cell.

  • The ampersand joins two values at a time and chains freely. =A2 & ", " & B2 & ", " & C2 is the fastest thing to type and the easiest to read six months later.
  • CONCAT accepts exactly two values and no ranges. It is a legacy function with no advantage over the ampersand.
  • CONCATENATE accepts any number of values and will take a range, joining it in row-by-row order. You cannot set a separator, so you interleave them by hand.
  • TEXTJOIN is the only one with a separator argument and a skip-empties argument. On anything wider than three columns it is the right default.

Everything below assumes TEXTJOIN unless the example says otherwise.

Why Blank Cells Leave Stray Commas and Double Spaces

Take a mailing address split across five columns: street, unit, city, state, and zip. Half the rows have no unit number. Chain them with ampersands and every apartment-free row reads "123 Main St, , Austin, TX". The gap is not a typo. Sheets joined an empty cell exactly as instructed.

TEXTJOIN's second argument fixes this. Set it to TRUE and empty cells drop out along with their separator.

=TEXTJOIN(", ", TRUE, A2:E2)

One catch: a cell holding a single space is not empty. It is a one-character string, so TEXTJOIN joins it and you get your double separator back from a cell that looks blank on screen. Filter the range first.

=TEXTJOIN(", ", TRUE, FILTER(A2:E2, TRIM(A2:E2)<>""))

If invisible whitespace is a recurring problem in the source data, fix it upstream instead. Our guide to removing extra spaces in Google Sheets covers the cleanup pass.

The deeper limit is that TEXTJOIN applies one separator to everything. A real address does not use one separator. You want a space between street and unit, a comma before the city, and a space before the zip. Mixed formatting sends you back to hand-built nesting, and the blank-handling comes back with it.

=A2 & IF(B2<>"", " " & B2, "") & ", " & C2 & ", " & D2 & " " & E2

One IF per optional field. Add a country column and you edit the formula again. That is a lot of typing for "put these together nicely".

Combine Text and Keep Dates and Currency Readable

A joined date comes out as a five-digit number. Sheets stores dates as serial numbers and the display format lives on the cell, not the value. Join the value and the format is left behind.

Wrap the cell in TEXT and state the format you want:

=A2 & " - " & TEXT(B2, "yyyy-mm-dd") & " - " & TEXT(C2, "$#,##0.00")

The same rule covers currency, percentages, and any number where trailing zeros matter. If the dates in the source column are inconsistent to begin with, standardize them before joining. See how to standardize date formats in Google Sheets.

Add a Line Break Between Combined Cells

Use CHAR(10) as the separator. It is the line feed character, and typing a literal backslash-n gives you the two characters, not a break.

=TEXTJOIN(CHAR(10), TRUE, A2:D2)

The break will not show up yet. CHAR(10) only renders as a new line when the cell has wrapping turned on. Select the column, then choose Format, then Wrapping, then Wrap. This is the single most common reason people conclude that CHAR(10) is broken. The line feed was in the string the whole time.

Combine Two Columns Down the Whole Sheet Without Dragging

Wrap the join in ARRAYFORMULA and write it once in the top row. It fills down on its own, including for rows added later.

=ARRAYFORMULA(IF(A2:A="", "", TRIM(A2:A & " " & B2:B)))

The IF guard is not optional. Without it, the array evaluates every empty row in the column and returns a separator on each one, so you get thousands of rows of stray punctuation below your data.

ARRAYFORMULA handles the ampersand fine but will not spread TEXTJOIN across rows, because TEXTJOIN collapses whatever it is given into one value. For a multi-column join on every row, use BYROW with LAMBDA:

=BYROW(A2:E, LAMBDA(r, IF(COUNTA(r)=0, "", TEXTJOIN(", ", TRUE, r))))

That gives you TEXTJOIN's blank-skipping on every row from a single formula. On very large sheets the plain ampersand pattern calculates faster, since BYROW runs a separate LAMBDA call per row.

Combine an Entire Column Into One Cell

Point TEXTJOIN at an open-ended range. This is the move for building a comma-separated list out of a column of values.

=TEXTJOIN(", ", TRUE, A2:A)

Two variants cover most of what people actually want. Unique values only, and values matching a condition:

=TEXTJOIN(", ", TRUE, UNIQUE(FILTER(A2:A, A2:A<>"")))
=TEXTJOIN(", ", TRUE, FILTER(A2:A, B2:B="Pending"))

One hard ceiling applies here. A Google Sheets cell holds at most 50,000 characters, and a join that exceeds it fails with an error stating the text result of TEXTJOIN is longer than the limit of 50000 characters. It is not a formula bug and no rewrite fixes it. Split the range across two cells, or filter down to the rows you need.

Merging Cells Is Not Combining Text

The Merge cells button under the Format menu is a layout tool, not a text tool. It keeps only the upper-leftmost value and discards everything else in the selection. Sheets warns you first, with a prompt saying that merging cells will only preserve the top-leftmost value.

People searching for how to merge cells in Google Sheets usually want the formula, not the button. A formula reads every cell, writes the result somewhere new, and leaves the source data intact. Merge changes how the grid looks and destroys data doing it.

The FITS Way (Describe the Result)

With FITS, you describe the finished string once. Blank fields and spacing sort themselves out.

=FITS("Combine into one mailing address, skip any blank fields: " & A2 & " | " & B2 & " | " & C2 & " | " & D2 & " | " & E2)

Making a full name from first and last is the same idea, and it handles the row where the middle name is missing.

=FITS("Build a full name from these parts, drop blanks: " & A2 & " " & B2 & " " & C2)

No IF branches, no second-guessing the delimiter. You state the shape of the output and every row follows it.

Why Your Combined Text Looks Wrong

Five symptoms account for nearly every broken join. Match yours to the cause:

  • A five-digit number where a date should be. The join dropped the cell's display format. Wrap it in TEXT.
  • Double separators on some rows. Either you are not using TEXTJOIN's TRUE flag, or those cells hold a space rather than nothing. Filter on TRIM.
  • Line breaks not appearing. CHAR(10) is in the string but the cell is not set to Wrap.
  • The whole formula returns #N/A or #REF!. TEXTJOIN propagates any error found in its range. Wrap the range in IFERROR before joining.
  • An error about 50000 characters. You hit the per-cell limit. Split the range or filter it.

Frequently Asked Questions

What is the formula to combine text from multiple cells in Google Sheets?

Use =TEXTJOIN(", ", TRUE, A2:E2). The first argument is the separator, the second skips empty cells, and the third is the range. For two or three cells, =A2 & " " & B2 is simpler.

Can CONCATENATE take a range in Google Sheets?

Yes, CONCATENATE accepts a range and joins it in row-by-row order. It has no separator argument, so the values run together with nothing between them. CONCAT is stricter and takes exactly two values with no ranges at all.

How do I combine two columns in Google Sheets so new rows fill in automatically?

Write the join once in the top row inside ARRAYFORMULA, with a blank guard: =ARRAYFORMULA(IF(A2:A="", "", A2:A & " " & B2:B)). Rows added below inherit it with no dragging.

Why does TEXTJOIN still leave a double comma when ignore_empty is TRUE?

Because at least one of those cells contains a space, not nothing. A space is a one-character string and TEXTJOIN treats it as real content. Wrap the range in FILTER with a TRIM test to drop them.

Does combining cells delete the original data?

A formula never touches the source cells. The Merge cells button does, keeping only the upper-leftmost value. If you want the originals intact, use a formula in a new column.

What is the maximum text a combined cell can hold?

50,000 characters. Past that, TEXTJOIN returns an error saying the text result is longer than the limit of 50000 characters. Split the join across two cells or filter the range down.

When to Use Each

Use the ampersand or TEXTJOIN when the cells are clean and the format is one flat delimiter. Reach for =FITS() when fields go blank, when the spacing changes between fields, or when you want a readable sentence instead of a joined string. Splitting is the mirror image of this job, covered in how to separate first and last names. If the parts themselves are messy first, tidy them with our normalize data guide. Combining is one of the jobs that used to need a pattern, and the rest are in automating Google Sheets tasks you used to need regex for. If you are moving a whole layout around, see how to swap rows and columns in Google Sheets. Joining a mailing label back together is easy. Taking one apart is the harder direction, covered in parsing an address into street, city, state, and ZIP.

Stop Nesting IF Statements to Join Cells

FITS puts plain-English AI formulas inside Google Sheets. Describe the output. Get clean joined text with no empty gaps. Free tier included.