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

Excel动态合并多列数据至results表:求可行公式或VBA脚本

解决方案:合并动态列数据到单列

一、Excel公式方案

1. 适用于Excel 365/2021(支持动态数组)

在results工作表的首个单元格(如A1)输入以下公式,自动生成合并后的单列数据:

=TOCOL(DATA!A:C,1)

TOCOL函数的第二个参数1表示忽略空单元格,会严格按A列→B列→C列的顺序,将所有非空数据合并为单列,完全适配任意动态行数的组合情况。

2. 适用于旧版Excel(无动态数组支持)

使用数组公式(输入后按Ctrl+Shift+Enter确认),在results工作表A1输入:

=IFERROR(INDEX(DATA!$A:$C,SMALL(IF(DATA!$A:$C<>"",ROW(DATA!$A:$C)),ROW(A1)),MIN(IF(ROW(DATA!$A:$C)=SMALL(IF(DATA!$A:$C<>"",ROW(DATA!$A:$C)),ROW(A1)),COLUMN(DATA!$A:$C)))),"")

下拉复制公式直到出现空值即可。建议将公式中的$A:$C限定为实际数据范围(如$A$1:$C$1000),提升计算效率。

二、VBA脚本方案

打开Excel的VBA编辑器(按Alt+F11),插入模块后粘贴以下代码,运行即可完成合并:

Sub MergeColumnsToResults()
    Dim wsData As Worksheet, wsResults As Worksheet
    Dim lastRow As Long, i As Long, j As Long, outputRow As Long
    Dim cellValue As Variant
    
    Set wsData = ThisWorkbook.Worksheets("DATA")
    Set wsResults = ThisWorkbook.Worksheets("results")
    
    ' 清空results表现有数据(可根据需求注释此行)
    wsResults.Cells.Clear
    
    outputRow = 1
    
    ' 遍历A、B、C三列
    For j = 1 To 3
        lastRow = wsData.Cells(wsData.Rows.Count, j).End(xlUp).Row
        If lastRow >= 1 Then
            For i = 1 To lastRow
                cellValue = wsData.Cells(i, j).Value
                If cellValue <> "" Then
                    wsResults.Cells(outputRow, 1).Value = cellValue
                    outputRow = outputRow + 1
                End If
            Next i
        End If
    Next j
    
    MsgBox "数据合并完成!", vbInformation
End Sub

脚本会自动遍历指定列的所有非空数据,按顺序写入results表,适配所有动态行数组合,且可按需保留或清空目标表原有数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 14:46:10