---
title: "3-Minute Win: Use REDUCE to Concatenate a Column of Values Into One Cell"
date: 2026-06-06T00:00:00Z
updated: 2026-06-14T04:30:59Z
tags: ["Excel", "REDUCE", "LAMBDA", "Formulas", "Data Cleaning", "Data Transformation", "Microsoft 365", "Dynamic Arrays"]
canonical: https://bianca.codes/blog/reduce-concatenate-column-into-one-cell/
---

# 3-Minute Win: Use REDUCE to Concatenate a Column of Values Into One Cell

_Joining a column of names or tags into one comma-separated string used to need TEXTJOIN or a helper column. REDUCE does it in one formula, and lets you transform each item before it gets concatenated._

Squashing a column of values into a single comma-separated string used to mean TEXTJOIN, or a helper column, or both. REDUCE does it in one formula, and because every value passes through a LAMBDA on the way in, you can transform each item before it lands in the string. Three lines, no helper columns.

## How to do it

You've got names in B2:B20 and you want them in one cell as `Ada, Grace, Linus, ...`.

1. Click an empty cell.
2. Type: `=REDUCE("", B2:B20, LAMBDA(acc, val, IF(acc="", val, acc & ", " & val)))`
3. Press Enter.

The whole column collapses into one string. The `IF(acc="", ...)` is the only fiddly part: it stops you getting a stray `, ` at the very front, because the first value has nothing to be joined to yet.

Want to transform each item on the way in? Do it to `val`. Wrap every name in quotes for a SQL `IN` list:

```vba
=REDUCE("", B2:B20, LAMBDA(acc, val, IF(acc="", "'" & val & "'", acc & ", '" & val & "'")))
```

That returns `'Ada', 'Grace', 'Linus'`, ready to paste straight into a query.

## Why it works

REDUCE folds an array down to a single value. It starts with the initial value (here, an empty string), then walks the range, and at each step runs your LAMBDA with the result so far (`acc`) and the current value (`val`). Whatever the LAMBDA returns becomes the new `acc`. By the last row, `acc` is the finished string.

The reason this beats TEXTJOIN is the `val` slot. TEXTJOIN joins values as they are. REDUCE hands you each value individually, so you can quote it, trim it, upper-case it, or skip it with a conditional before it ever gets appended.

## When not to use it

If you just need a plain join with no per-item transformation and you're on a version with TEXTJOIN, use TEXTJOIN: `=TEXTJOIN(", ", TRUE, B2:B20)` is shorter and its TRUE flag skips blanks for free. REDUCE earns its place the moment you need to do something to each value first, not before.
