You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Excel中创建新列并归集其他列的全部文本内容?

实现Excel多列内容合并为单列并自动同步更新

方法1:Excel 365/2021及以上版本(推荐)

直接用TOCOL动态数组函数,一步实现自动同步:
在目标新列的第一个单元格输入公式:

=TOCOL(A1:T100, 1)
  • 参数说明:A1:T100替换成你实际的20列数据范围;1表示忽略空单元格,若需要保留空值可改为2,默认0会包含空单元格。
  • 效果:公式会自动溢出所有非空内容到下方单元格,原列编辑、新增内容时,新列会实时同步更新,无需手动操作。

方法2:旧版Excel(无动态数组功能)

用数组公式结合INDEX实现,需配合表格自动扩展范围:

  1. 先选中原20列数据,按Ctrl+T转为超级表格(勾选“我的表格有标题”),表格会自动识别新增的行/列。
  2. 在目标新列第一个单元格输入数组公式,按Ctrl+Shift+Enter确认(旧版Excel需按此组合键,新版直接回车):
=INDEX(Table1[#All],INT((ROW()-ROW($A$21))/COLUMNS(Table1[#All]))+1,MOD(ROW()-ROW($A$21),COLUMNS(Table1[#All]))+1)
  • 替换Table1为你的表格名称,$A$21为新列第一个单元格的地址。
  • 下拉公式直到出现#REF!,后续原表格新增内容时,表格范围自动扩展,公式会同步获取新内容。

方法3:VBA宏实现自动更新(需启用宏)

若需要更灵活的控制,可添加工作表变更事件:

  1. 右键工作表标签→查看代码,粘贴以下VBA代码:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim srcRange As Range, destRange As Range
    Dim arr() As Variant, i As Long, j As Long, k As Long
    
    Set srcRange = Me.Range("A1:T100") '替换为你的数据范围
    Set destRange = Me.Range("U1") '替换为新列起始单元格
    
    arr = srcRange.Value
    ReDim newArr(1 To UBound(arr) * UBound(arr, 2), 1 To 1)
    
    k = 1
    For i = 1 To UBound(arr)
        For j = 1 To UBound(arr, 2)
            If arr(i, j) <> "" Then
                newArr(k, 1) = arr(i, j)
                k = k + 1
            End If
        Next j
    Next i
    
    destRange.Resize(k - 1, 1).Value = newArr
End Sub
  • 替换代码中的数据范围和新列起始单元格地址。
  • 效果:只要原数据区域有编辑或新增,宏会自动更新新列内容,忽略空单元格。

内容的提问来源于stack exchange,提问作者mohsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 19:25:22