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

假设您有两列IDDescriptionSheet1在sheet的列AB上。此宏将在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


假设您有两列IDDescriptionSheet1在sheet的列AB上。此宏将在C列中输出所需的格式。请查看代码中的注释,以便更好地理解。

如果您能提供迄今为止尝试过的内容,那么提供答案会更容易。最初的想法是:在数组中捕获数据,然后进行转置。这可以用宏来完成。我不确定这种转置是否有任何内置功能。恭喜!您刚刚达到了Excel的一些极限!为了超越它们,您必须解锁VBA。请在此阅读更多内容-如果您能提供您迄今为止所尝试的内容,那么提供答案会更容易。最初的想法是:在数组中捕获数据,然后进行转置。这可以用宏来完成。我不确定这种转置是否有任何内置功能。恭喜!您刚刚达到了Excel的一些极限!为了超越它们,您必须解锁VBA。请在此阅读更多信息-非常感谢!非常感谢你的帮助!它工作得很好@Mrig-我不想成为坏消息的使者,但这只有在你运气好的时候才会起作用-例如,如果你把范围放在
G17:H20
中,公式放在
R13
中的某个地方,然后整个解决方案都给出了一个错误。@vityta-我的答案中的第一个公式是通用的,只需更改范围,就可以在工作表中的任何地方使用。你所说的对第二个公式来说是正确的。@Vityata-你可以看到答案中的屏幕截图。@Mrig-离开它们,它们很好。非常感谢!非常感谢你的帮助!它工作得很好@Mrig-我不想成为坏消息的使者,但这只有在你运气好的时候才会起作用-例如,如果你把范围放在
G17:H20
中,公式放在
R13
中的某个地方,然后整个解决方案都给出了一个错误。@vityta-我的答案中的第一个公式是通用的,只需更改范围,就可以在工作表中的任何地方使用。你所说的对第二个公式来说是正确的。@Vityata-你可以看到答案中的屏幕截图。@Mrig-离开它们,它们很好。我一直在使用代码,它工作得很完美!非常感谢你帮我解决这个问题!我一直在使用的代码,它的作品完美!非常感谢你帮我解决这个问题!