最近同事在工作中遇到一个问题(如图1所示),她希望将这张多维的表格按照月份转换为图2所示的二维表格,由于实际的数据量比较多,如果采取剪切、粘贴的方法,操作相当繁琐。有没有简单一些的方法呢?

图1
图2
考虑之后,建议同事使用VBA代码实现上述要求,按下“Alt+F11”组合键,打开Microsoft Visual Basic for Applications编辑器窗口,依次选择“插入→模块”,在右侧窗格插入一个空白模块(如图3所示),手工输入或粘贴如下代码:
Sub test()
Application.ScreenUpdating = False
a = 2
For j = 2 To Sheets(1).Cells(Rows.Count, 1).End(3).Row
Sheets(1).Cells(j, 1).Resize(1, 6).Copy Cells(a, 1)
For i = 7 To 18
If Len(Sheets(1).Cells(j, i)) > 0 Then
Sheets(1).Cells(j, 1).Resize(1, 6).Copy Cells(a, 1)
Cells(a, 7) = Sheets(1).Cells(1, i)
Cells(a, 8) = Sheets(1).Cells(j, i)
a = a + 1
End If
Next i
Next j
Application.ScreenUpdating = True
End Sub
代码检查无误之后,依次选择“文件→关闭并返回到Microsoft Excel”命令,返回Excel主界面,按下“Alt+F8”组合键,打开“宏”对话框,选择并运行宏,稍等片刻,很快就可以看到图4所示的效果。
进阶:或者也可以使用公式完成转换任务,选择F2单元格,在编辑栏输入公式“=OFFSET(原表!A$2,MOD(ROW(A11),11),)”,向右、向下拖拽填充柄至F2单元格;选择G2单元格,在编辑栏输入公式“=OFFSET(原表!$G$1,(COLUMN(A1)>1)*(MOD(ROW(A1)-1,11)+1),INT((ROW(A1)-1)/11))”,向右拖拽填充柄至H2单元格,公式执行之后向下拖拽填充柄,即可看到图5所示的转换效果。
图3
图4
图5
联系客服