Excel 将多行转置为一列
我有下表:Excel 将多行转置为一列,excel,Excel,我有下表: ID Description 1 name1 2 name2 3 name3 4 name4 我想要以下的 ID+name 1 name1 2 name2 3 name3 4 name4 你有什么特别的建议吗? 我已经尝试了一些其他的转置方法,但是我不能一次管理两行 感谢您的帮助。如果您愿意使用以下公式,则可能会有所帮助 在单元格D2中输入以
ID Description
1 name1
2 name2
3 name3
4 name4
我想要以下的
ID+name
1
name1
2
name2
3
name3
4
name4
你有什么特别的建议吗?
我已经尝试了一些其他的转置方法,但是我不能一次管理两行
感谢您的帮助。如果您愿意使用以下公式,则可能会有所帮助 在单元格D2中输入以下公式
=INDEX($A$2:$B$5,1+INT((ROW(A1)-1)/COLUMNS($A$2:$B$5)),MOD(ROW(A1)-1+COLUMNS($A$2:$B$5),COLUMNS($A$2:$B$5))+1)
根据需要向下拖动/复制。请参阅图片以获取参考
对于@vityta:
数据在G17:H20
中,公式在I10
数据在G18:H21
中,公式在I12
如果您愿意使用公式,那么下面的内容可能会有所帮助 在单元格D2中输入以下公式
=INDEX($A$2:$B$5,1+INT((ROW(A1)-1)/COLUMNS($A$2:$B$5)),MOD(ROW(A1)-1+COLUMNS($A$2:$B$5),COLUMNS($A$2:$B$5))+1)
根据需要向下拖动/复制。请参阅图片以获取参考
对于@vityta:
数据在G17:H20
中,公式在I10
数据在G18:H21
中,公式在I12
您可以使用基于偏移量的公式
=OFFSET($A$1,INT((ROW(A1)-1)/2),MOD(ROW(A1)-1,2))
可以使用基于偏移量的公式
=OFFSET($A$1,INT((ROW(A1)-1)/2),MOD(ROW(A1)-1,2))
使用VBA宏,您可以这样做:
Sub Transpose1()
Worksheets("Sheet1").Select
Range("C1").Value = "ID+Name"
'Get Worksheet
Dim ws As Worksheet: Set ws = Worksheets("Sheet1")
'Find last row
Dim LastRow As Long: LastRow = ws.UsedRange.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Dim i As Long, j As Long, RowCounter As Long: RowCounter = 2
Dim DestCol As Long
DestCol = 3
With ws
'loop through all rows
For i = 2 To LastRow
'set value in row=1,col=3, with value from row=i,col=1
.Cells(RowCounter, DestCol) = ws.Cells(i, 1)
RowCounter = RowCounter + 1
'set value in row=2,col=3, with value from row=i,col=2
.Cells(RowCounter, DestCol) = ws.Cells(i, 2)
RowCounter = RowCounter + 1
Next i
End With
End Sub
假设您有两列ID,Description在Sheet1在sheet的列A和B上。此宏将在C列中输出所需的格式。请查看代码中的注释以便更好地理解。使用VBA宏,您可以这样做:
Sub Transpose1()
Worksheets("Sheet1").Select
Range("C1").Value = "ID+Name"
'Get Worksheet
Dim ws As Worksheet: Set ws = Worksheets("Sheet1")
'Find last row
Dim LastRow As Long: LastRow = ws.UsedRange.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Dim i As Long, j As Long, RowCounter As Long: RowCounter = 2
Dim DestCol As Long
DestCol = 3
With ws
'loop through all rows
For i = 2 To LastRow
'set value in row=1,col=3, with value from row=i,col=1
.Cells(RowCounter, DestCol) = ws.Cells(i, 1)
RowCounter = RowCounter + 1
'set value in row=2,col=3, with value from row=i,col=2
.Cells(RowCounter, DestCol) = ws.Cells(i, 2)
RowCounter = RowCounter + 1
Next i
End With
End Sub
假设您有两列ID,Description在Sheet1在sheet的列A和B上。此宏将在C列中输出所需的格式。请查看代码中的注释,以便更好地理解。如果您能提供迄今为止尝试过的内容,那么提供答案会更容易。最初的想法是:在数组中捕获数据,然后进行转置。这可以用宏来完成。我不确定这种转置是否有任何内置功能。恭喜!您刚刚达到了Excel的一些极限!为了超越它们,您必须解锁VBA。请在此阅读更多内容-如果您能提供您迄今为止所尝试的内容,那么提供答案会更容易。最初的想法是:在数组中捕获数据,然后进行转置。这可以用宏来完成。我不确定这种转置是否有任何内置功能。恭喜!您刚刚达到了Excel的一些极限!为了超越它们,您必须解锁VBA。请在此阅读更多信息-非常感谢!非常感谢你的帮助!它工作得很好@Mrig-我不想成为坏消息的使者,但这只有在你运气好的时候才会起作用-例如,如果你把范围放在
G17:H20
中,公式放在R13
中的某个地方,然后整个解决方案都给出了一个错误。@vityta-我的答案中的第一个公式是通用的,只需更改范围,就可以在工作表中的任何地方使用。你所说的对第二个公式来说是正确的。@Vityata-你可以看到答案中的屏幕截图。@Mrig-离开它们,它们很好。非常感谢!非常感谢你的帮助!它工作得很好@Mrig-我不想成为坏消息的使者,但这只有在你运气好的时候才会起作用-例如,如果你把范围放在G17:H20
中,公式放在R13
中的某个地方,然后整个解决方案都给出了一个错误。@vityta-我的答案中的第一个公式是通用的,只需更改范围,就可以在工作表中的任何地方使用。你所说的对第二个公式来说是正确的。@Vityata-你可以看到答案中的屏幕截图。@Mrig-离开它们,它们很好。我一直在使用代码,它工作得很完美!非常感谢你帮我解决这个问题!我一直在使用的代码,它的作品完美!非常感谢你帮我解决这个问题!