在Excel中将垂直数据转换为水平
在Excel表中我有如下的数据:
Name Age ------- ------- XYZ 24 ABC 25 CDE 26 GHI 27
我想要将这些数据转换为Excel表格中的以下内容。
Name1 Age1 Name2 Age2 Name3 Age3 Name4 Age4 XYZ 24 ABC 25 CDE 26 GHI 27
这可能吗? 请帮忙。 谢谢!
至于非VBA解决scheme – 您可以使用自动填充和sorting的一些创造性使用:
做一些创意自动填充和sorting:
复制和粘贴转置:
你做完了
将其粘贴到vba编辑器(标准模块)中,并将代码添加到button中。
该代码假定表格从范围“A1”开始。
第一行包含标题,其他行包含您的示例中的值。
我从第8行粘贴输出。
让我知道是否有帮助。
Option Explicit Sub Name_Age() Dim oRange As Excel.Range Dim iRange_Cols As Integer Dim lRange_Rows As Long Dim lCnt As Long Dim vArray As Variant Dim vArray_Dest As Variant Dim lUbound_Rows As Long Dim lUBound_Cols As Long Set oRange = ThisWorkbook.Sheets(1).UsedRange iRange_Cols = oRange.Columns.Count lRange_Rows = oRange.Rows.Count - 1 ReDim vArray(1 To lRange_Rows, 0 To iRange_Cols) ReDim vArray_Dest(1 To iRange_Cols, 1 To (lRange_Rows * iRange_Cols)) vArray = oRange lCnt = 0 For lCnt = 1 To lRange_Rows vArray_Dest(1, (lCnt * 2) - 1) = CStr("Name" & lCnt) vArray_Dest(1, (lCnt * 2)) = CStr("Age" & lCnt) vArray_Dest(2, (lCnt * 2) - 1) = vArray(1 + lCnt, 1) vArray_Dest(2, (lCnt * 2)) = vArray(1 + lCnt, 2) Next lCnt lUbound_Rows = UBound(vArray_Dest, 1) lUBound_Cols = UBound(vArray_Dest, 2) Set oRange = Nothing Set oRange = ThisWorkbook.Sheets(1).Range(Cells(8, 1), Cells(8 + lUbound_Rows - 1, lUBound_Cols)) oRange = vArray_Dest End Sub