如何在Excel中将列转置为行并实现对应行的重复显示?
在Excel中实现列转置并重复基础数据行的方法
你需要将包含多货币列的宽表转换为每行对应单一货币的窄表,同时让日期、年、月、日这些基础数据随转置后的内容重复匹配。以下是三种实用方法:
方法1:Power Query(推荐,适合批量数据)
这是Excel自带的高效数据转换工具,操作可复用:
- 选中原始数据区域(含表头),点击数据选项卡 → 从表格/区域,确认勾选“我的表格有标题”后进入编辑器。
- 在编辑器中选中USD、EUR、JPY这三列,点击转换选项卡 → 逆透视列 → 逆透视所选列。
- 此时生成的
属性和值列可右键重命名为Currency和Currency/CCY。 - 点击主页 → 关闭并上载,选择加载到新工作表即可得到目标结果。
方法2:公式组合(适合小数据集)
若数据量不大,可手动用公式生成:
假设原始数据在A1:G3区域(A列为Date,G列为JPY),在新工作表中:
- A2单元格输入:
=INDEX($A$2:$A$3,INT((ROW(A1)-1)/3)+1),向右填充至D列(Year、Month、Day列),实现基础数据重复。 - E2单元格输入:
=INDEX($E$1:$G$1,MOD(ROW(A1)-1,3)+1),提取循环的货币名称。 - F2单元格输入:
=INDEX($E$2:$G$3,INT((ROW(A1)-1)/3)+1,MOD(ROW(A1)-1,3)+1),提取对应货币数值。 - 选中A2:F2,向下填充至所有行生成完毕。
方法3:VBA脚本(适合自动化重复操作)
如果需要频繁处理这类数据,可编写VBA宏:
按Alt+F11打开VBA编辑器,插入新模块,粘贴以下代码:
Sub TransposeCurrencyData() Dim srcSheet As Worksheet, destSheet As Worksheet Dim lastRow As Long, lastCol As Long Dim i As Long, j As Long, destRow As Long Set srcSheet = ThisWorkbook.Sheets("Sheet1") '替换为你的原始数据工作表名 Set destSheet = ThisWorkbook.Sheets.Add destSheet.Name = "TransposedData" '写入表头 destSheet.Range("A1:F1") = Array("Date", "Year", "Month", "Day", "Currency", "Currency/CCY") destRow = 2 lastRow = srcSheet.Cells(srcSheet.Rows.Count, "A").End(xlUp).Row lastCol = srcSheet.Cells(1, srcSheet.Columns.Count).End(xlToLeft).Column '循环处理每一行和货币列 For i = 2 To lastRow For j = 5 To lastCol '从第5列(USD)开始遍历货币列 destSheet.Cells(destRow, "A") = srcSheet.Cells(i, "A") destSheet.Cells(destRow, "B") = srcSheet.Cells(i, "B") destSheet.Cells(destRow, "C") = srcSheet.Cells(i, "C") destSheet.Cells(destRow, "D") = srcSheet.Cells(i, "D") destSheet.Cells(destRow, "E") = srcSheet.Cells(1, j) destSheet.Cells(destRow, "F") = srcSheet.Cells(i, j) destRow = destRow + 1 Next j Next i End Sub
修改代码中的Sheet1为你的原始数据工作表名称,运行宏即可自动生成目标表格。
内容的提问来源于stack exchange,提问作者Chandramouli Raman
相关产品推荐
相关产品推荐

