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

Excel技术需求:将非连续列数据合并至指定单列并保留行位置

解决多列数据合并到单列并保留空白与动态行的问题

方法1:Excel 365/2021 动态数组公式(推荐)

利用TOCOL函数可快速将多列数据按列堆叠到单列,自动保留空白单元格,且适配A列动态变化的行数:

  1. J列(对应B/C/D列)
    在J2单元格输入以下公式,Excel会自动扩展填充所有结果:
=TOCOL(B2:INDEX(D:D,COUNTA(A:A)),3)
  • COUNTA(A:A):自动计算A列非空行总数,确定数据的最后一行
  • B2:INDEX(D:D,COUNTA(A:A)):定义B/C/D列的有效数据范围
  • TOCOL(...,3):按列堆叠数据,参数3表示保留所有空白单元格
  1. K列(对应E/F/G列)
    在K2单元格输入:
=TOCOL(E2:INDEX(G:G,COUNTA(A:A)),3)

方法2:VBA宏(兼容所有Excel版本)

如果使用旧版Excel(无动态数组功能),可以通过宏实现批量复制,确保保留空白与行顺序:

按Alt+F11打开VBA编辑器,插入新模块,粘贴以下代码:

Sub CombineColumnsToSingle()
    Dim LastRow As Long
    Dim rngSource As Range
    Dim destRow As Long
    
    ' 获取A列最后数据行(以A列为行计数依据)
    LastRow = Cells(Rows.Count, "A").End(xlUp).Row
    
    ' 将B/C/D列依次复制到J列
    destRow = 2
    For Each col In Array("B", "C", "D")
        Set rngSource = Range(col & "2:" & col & LastRow)
        rngSource.Copy Destination:=Cells(destRow, "J")
        destRow = destRow + rngSource.Rows.Count
    Next col
    
    ' 将E/F/G列依次复制到K列
    destRow = 2
    For Each col In Array("E", "F", "G")
        Set rngSource = Range(col & "2:" & col & LastRow)
        rngSource.Copy Destination:=Cells(destRow, "K")
        destRow = destRow + rngSource.Rows.Count
    Next col
End Sub

运行宏后,B/C/D列的数据会按顺序堆叠到J列,E/F/G列堆叠到K列,所有空白单元格都会被如实保留。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:07:01