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

如何用Excel VBA宏将多行数据转置为带重复表头的两列?

Excel表格格式转换解决方案

原表格格式

标题数据1数据2数据3数据n
Header AData 1Data 2Data 3Data n
Header BData 1Data 2Data 3Data n
Header CData 1Data 2Data 3Data n

期望输出格式

标题数据
Header AData 1
Header AData 2
Header AData 3
Header BData 1
Header BData 2
Header BData 3
Header CData 1
Header CData 2
Header CData 3

现有问题代码

Sub CopyPaste_ValuesTranspose()

Application.ScreenUpdating = False

Dim ws1 As Worksheet, ws2 As Worksheet

Set ws1 = Sheets("Sheet1") '<< source sheet name

Set ws2 = Sheets.Add(after:=Sheets(Sheets.Count)) '<< new Sheet

ws1.Range("A1").CurrentRegion.Copy

ws2.Range("A1").PasteSpecial xlValues, Transpose:=True

Application.CutCopyMode = False

ws2.Cells.EntireColumn.AutoFit

Application.ScreenUpdating = True

End Sub

修改后的VBA代码

以下代码会遍历原表的每一行标题,逐个取出该行的所有数据,将标题与数据配对后逐行写入新表:

Sub ConvertTableFormat()
    Application.ScreenUpdating = False
    
    Dim wsSource As Worksheet, wsTarget As Worksheet
    Dim sourceRange As Range
    Dim rowNum As Long, colNum As Long
    Dim targetRow As Long
    Dim currentHeader As String
    
    ' 设置源工作表和目标工作表
    Set wsSource = Sheets("Sheet1")
    Set wsTarget = Sheets.Add(after:=Sheets(Sheets.Count))
    wsTarget.Name = "ConvertedTable" ' 给新表命名
    
    ' 获取源数据区域
    Set sourceRange = wsSource.Range("A1").CurrentRegion
    
    ' 初始化目标表起始行
    targetRow = 1
    
    ' 遍历源表的每一行
    For rowNum = 1 To sourceRange.Rows.Count
        ' 获取当前行的标题(A列内容)
        currentHeader = sourceRange.Cells(rowNum, 1).Value
        ' 遍历当前行的所有数据列(从第2列开始)
        For colNum = 2 To sourceRange.Columns.Count
            ' 写入标题到目标表A列
            wsTarget.Cells(targetRow, 1).Value = currentHeader
            ' 写入对应数据到目标表B列
            wsTarget.Cells(targetRow, 2).Value = sourceRange.Cells(rowNum, colNum).Value
            ' 目标行号自增
            targetRow = targetRow + 1
        Next colNum
    Next rowNum
    
    ' 自动调整目标表列宽
    wsTarget.Cells.EntireColumn.AutoFit
    
    Application.ScreenUpdating = True
End Sub

代码逻辑说明

  • 关闭屏幕更新提升运行效率
  • 定义源数据工作表与新建的目标工作表
  • 遍历源表每一行,提取该行第一列的标题内容
  • 针对每一行,从第二列开始遍历所有数据列,将标题与对应数据分别写入目标表的A、B列,每完成一组配对就切换到下一行
  • 最后自动调整目标表列宽,恢复屏幕更新

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 13:23:25