在excel中将垂直数据转换为水平数据
在excel表格中,我有如下数据:在excel中将垂直数据转换为水平数据,excel,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
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编辑器(标准模块)中,并将代码添加到按钮。
代码假定表格从范围“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
将其粘贴到vba编辑器(标准模块)中,并将代码添加到按钮。
代码假定表格从范围“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
对于非VBA解决方案,您可以通过创造性地使用自动填充和排序来实现这一点: 进行一些创造性的自动填充和排序: 复制和粘贴转置: 你的工作完成了:
对于非VBA解决方案,您可以创造性地使用自动填充和排序来实现这一点: 进行一些创造性的自动填充和排序: 复制和粘贴转置: 你的工作完成了:
如果它能奏效,我能吗?但我不知道如何使用它。它是一次性的还是你需要定期这样做?可能是以前问题的重复。可能属于超级用户。但这怎么会偏离主题呢?如果它真的奏效了,我能做到吗?但我不知道如何使用它。它是一次性的还是你需要定期这样做?可能是以前问题的重复。可能属于超级用户。但这怎么会偏离主题呢?