如何基于Excel列值添加新行?求非VBA与VBA解决方案
没问题!我给你两种实用的方法来完成这个Excel表格的转换,不管你会不会VBA都能轻松搞定👇
非VBA方案(Power Query,新手友好+批量高效)
Power Query是Excel自带的工具,处理几千行数据毫无压力,步骤超简单:
- 选中你的数据区域,点击顶部「数据」选项卡,选择「从表格/区域」(弹出对话框时确认“我的表格有标题”,点击确定)
- 进入Power Query编辑器后,选中「COUNTRY」和「DATE」这两列(按住Ctrl可以多选),右键点击其中一列,选择「逆透视其他列」
- 现在会出现「属性」和「值」两列,双击「属性」改成「ITEM」,双击「值」改成「COUNT」
- 点击编辑器顶部「主页」选项卡的「关闭并上载」,转换好的数据就会自动出现在新工作表里啦
VBA方案(适合自动化/重复操作)
如果之后需要反复做同样的转换,写个VBA脚本就一劳永逸了:
- 打开你的Excel文件,按下
Alt + F11打开VBA编辑器 - 右键点击左侧的工作簿名称,选择「插入」→「模块」
- 把下面的代码粘贴进去,记得把代码里的
Sheet1改成你的数据所在工作表的名称(比如你的数据在「数据源」工作表,就改成"数据源") - 按下
F5运行代码,或者回到Excel里添加一个按钮来执行这段代码
Sub TransformData() Dim wsSource As Worksheet, wsDest As Worksheet Dim lastRow As Long, lastCol As Long, i As Long, j As Long, destRow As Long ' 设置源工作表和目标工作表 Set wsSource = ThisWorkbook.Sheets("Sheet1") ' 替换为你的数据工作表名称 Set wsDest = ThisWorkbook.Sheets.Add(After:=wsSource) wsDest.Name = "TransformedData" ' 写入目标表头 wsDest.Range("A1:D1") = Array("COUNTRY", "DATE", "COUNT", "ITEM") destRow = 2 ' 获取源数据的最后一行和最后一列 lastRow = wsSource.Cells(wsSource.Rows.Count, "A").End(xlUp).Row lastCol = wsSource.Cells(1, wsSource.Columns.Count).End(xlToLeft).Column ' 遍历源数据并转换格式 For i = 2 To lastRow ' 跳过表头,从第二行开始遍历数据 For j = 3 To lastCol ' 从第三列开始遍历ITEM列 wsDest.Cells(destRow, "A").Value = wsSource.Cells(i, "A").Value ' 复制COUNTRY wsDest.Cells(destRow, "B").Value = wsSource.Cells(i, "B").Value ' 复制DATE wsDest.Cells(destRow, "C").Value = wsSource.Cells(i, j).Value ' 复制COUNT值 wsDest.Cells(destRow, "D").Value = wsSource.Cells(1, j).Value ' 复制ITEM名称 destRow = destRow + 1 ' 目标行号自增 Next j Next i ' 自动调整目标列宽,让数据更美观 wsDest.Columns.AutoFit MsgBox "转换完成!结果在「TransformedData」工作表中。", vbInformation End Sub
这段代码会自动创建一个名为「TransformedData」的新工作表,把转换好的数据直接存进去,还会自动调整列宽,非常省心。
内容的提问来源于stack exchange,提问作者Adrianne von G




