如何用单个公式将命名区域range1按行拼接为单列区域?
用单个公式实现多行多列区域的逐行拼接
针对Excel 365/2021及以上版本(支持动态数组)
直接在目标区域的第一个单元格输入以下公式,会自动生成3×1的拼接结果区域,无需下拉填充:
=BYROW(range1, LAMBDA(r, TEXTJOIN("", TRUE, r)))
BYROW:遍历range1中的每一行LAMBDA(r, ...):对每一行r执行拼接操作TEXTJOIN("", TRUE, r):将当前行的所有单元格内容以空字符串为分隔符拼接,TRUE表示忽略空单元格(若需要保留空值可改为FALSE)
针对旧版Excel(不支持动态数组)
选中目标3×1区域(比如D1:D3),输入以下公式后按Ctrl+Shift+Enter(数组公式输入),即可一次性生成所有行的拼接结果:
=TEXTJOIN("", TRUE, INDEX(range1, ROW(D1:D3)-ROW(D1)+1, COLUMN(range1)-MIN(COLUMN(range1))+1))
INDEX(range1, ...):按行号和列号提取对应单元格内容ROW(D1:D3)-ROW(D1)+1:生成1到3的行序号,对应range1的每一行COLUMN(range1)-MIN(COLUMN(range1))+1:生成1到3的列序号,对应range1的每一列
用于后续比对查找的扩展用法
如果要通过拼接后的字符串反向匹配range1中的对应行,可结合以下公式实现类似自定义匹配的INDEX功能:
- 365/2021版本:
=XLOOKUP("AppleBlueMonkey", BYROW(range1, LAMBDA(r, TEXTJOIN("", TRUE, r))), range1, "未找到")
该公式会返回range1中对应拼接字符串的整行数据,若只需返回某一列(比如第一列),可将range1替换为INDEX(range1,,1)。
- 旧版本:
选中目标单元格,按Ctrl+Shift+Enter输入数组公式:
=INDEX(range1, MATCH("AppleBlueMonkey", TEXTJOIN("", TRUE, INDEX(range1, ROW(range1)-MIN(ROW(range1))+1, COLUMN(range1)-MIN(COLUMN(range1))+1)), 0), COLUMN(range1)-MIN(COLUMN(range1))+1)
内容的提问来源于stack exchange,提问作者Jabberwocky
相关产品推荐
相关产品推荐

