中国玉
回答者
回答于 2026-10-25
在Excel中将多列数据按顺序(首尾相接)合并为单列,可根据软件版本选择以下函数公式:
一、Microsoft 365 / Excel 2024 及以上版本
直接使用 TOCOL 函数最为简便。
公式示例:
=TOCOL(A1:C10, 1)
- 第一个参数为需要合并的多列区域。
- 第二个参数设为
1表示忽略空单元格;若需保留空单元格则省略或设为0。 - 默认按行扫描(先读完第一行各列,再读第二行),即逐行将多列拼接为一列。若需先读完第一列再读第二列,可添加第三个参数设为
TRUE。
二、Excel 2019 及更早版本(通用公式)
早期版本无动态数组函数,需借助 INDEX 配合数学运算确定目标单元格在源区域中的行列位置。
公式示例(假设数据在A1:C10,共3列10行):
=INDEX($A$1:$C$10, INT((ROW(A1)-1)/3)+1, MOD(ROW(A1)-1,3)+1)
步骤与原理:
- 将公式输入目标列的第一个单元格并向下填充。
ROW(A1)-1生成从0开始的序号序列。INT(序号/总列数)+1计算该序号对应源区域的行号。MOD(序号,总列数)+1计算该序号对应源区域的列号。INDEX根据计算出的行列号返回对应值。
三、使用 INDIRECT 与 ADDRESS 组合
通过构造单元格地址字符串间接引用,逻辑与 INDEX 类似,但属于易失性函数,数据量大时可能影响性能。
公式示例:
=INDIRECT(ADDRESS(INT((ROW(A1)-1)/3)+1, MOD(ROW(A1)-1,3)+COLUMN($A$1)))
常见误区
- 混淆排列方向:未区分“按行读取”还是“按列读取”,导致合并后的数据顺序与预期不符。调整 INT 和 MOD 中的除数即可切换方向。
- 硬编码行列数:公式中的列数(如上述的3)必须与实际数据列数一致,否则会出现错位或遗漏。
- 空值处理:通用公式会将空白单元格也作为有效位置输出0或空值,需额外嵌套 IF 判断来跳过空单元格。