如何用VBA循环处理列表并将多行分组数据转换为列格式?
批量转换6行组数据为列格式的VBA宏
需求说明
原始数据按6行一组排列,每组结构示例:
row1: aaa
row2: bbb
row3: ccc
row4: ddd
row5: eee
row6: fff
需转换为仅保留一次表头的列格式:
row1: row2: row3: row4: row5: row6:
aaa bbb ccc ddd eee fff
11 22 33 44 55 66
VBA实现代码
Sub ConvertRowsToColumns() Dim srcSheet As Worksheet Dim destSheet As Worksheet Dim lastRow As Long Dim groupCount As Long Dim i As Long, j As Long Dim destRow As Integer ' 指定源表和目标表,可根据实际修改表名 Set srcSheet = ThisWorkbook.Sheets("Sheet1") Set destSheet = ThisWorkbook.Sheets("Sheet2") ' 获取源数据最后一行,计算总组数 lastRow = srcSheet.Cells(srcSheet.Rows.Count, "A").End(xlUp).Row groupCount = lastRow \ 6 ' 写入唯一表头(从第一组提取) For j = 1 To 6 destSheet.Cells(1, j).Value = Split(srcSheet.Cells(j, "A").Value, " ")(0) Next j destRow = 2 ' 循环处理每组数据,转成列格式 For i = 0 To groupCount - 1 For j = 1 To 6 destSheet.Cells(destRow, j).Value = Split(srcSheet.Cells(i * 6 + j, "A").Value, " ")(1) Next j destRow = destRow + 1 Next i ' 自动调整列宽优化显示 destSheet.Columns.AutoFit End Sub
代码说明
- 工作表配置:修改
Sheet1和Sheet2为你实际使用的源数据工作表和结果输出工作表名称。 - 数据计算:自动识别源数据的有效范围,根据每组6行的规则计算总组数。
- 表头处理:仅从第一组提取
rowX:作为表头,避免重复。 - 数据转换:按组遍历源数据,将每组的6行内容对应写入目标表的同一行,完成行转列的格式转换。
- 格式优化:自动调整列宽,让输出内容更整齐易读。
内容的提问来源于stack exchange,提问作者eg11
相关产品推荐
相关产品推荐

