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
相关产品推荐
相关产品推荐

