Excel 复制行并粘贴到最后一列的右侧

Excel 复制行并粘贴到最后一列的右侧,excel,excel-formula,Excel,Excel Formula,我有大约5000行数据。每行大约有20列数据,带有ID号。某些ID号在某些行上重复,因为它们是相关的。我需要将具有相同ID号的行中的数据放在另一张表上的一行中 拥有: ID Date Data1 Data2 Data3 Data4 3 4/1/2012 6 12 9 7 3 4/2/2012 5 11 6 1 26 5/12/2014 3 9 5

我有大约5000行数据。每行大约有20列数据,带有ID号。某些ID号在某些行上重复,因为它们是相关的。我需要将具有相同ID号的行中的数据放在另一张表上的一行中

拥有:

ID    Date      Data1  Data2  Data3   Data4
3     4/1/2012    6      12    9        7
3     4/2/2012    5      11    6        1
26    5/12/2014   3       9    5        4
需要:


每行中有更多的列,因此每个粘贴是否可以查找第一个可用的空白列?

欢迎使用so/SE!你有没有尝试过解决这个问题的方法?如果需要,请使用说明更新OP。尝试下面的步骤,希望它们对你有用。我已经使用
ctrl
+
t
将下面的格式设置为数据表,但是如果您愿意,可以将公式转换为R1C1

步骤1:添加3个辅助列
  • 对于IdCount,使用
    =COUNTIFS([ID],@ID])
  • 对于RowNum,使用
    =ROW()
  • 对于NextRowSameId,使用
    =IF([@IdCount]>1,IFERROR(聚合(15,6,[RowNum]/([RowNum]>[@RowNum])*([ID]=[@ID])),1),“”),“”)和“”)
  • 然后按
    alt
    +
    f11
    打开VBA编辑器,插入模块,然后输入以下代码

    Sub sanitize()
        Dim NextRow As Range, RngTxt As String, NextRowNum As Integer
        For Each c In Range("data[IdCount]")
    ResetInnerLoop:
            If c.Value > 1 Then
                NextRowNum = c.Offset(0, 2).Value
                RngTxt = "A" & CStr(NextRowNum) & ":F" & CStr(NextRowNum)
                Range(RngTxt).Cut
                c.Offset(0, 0).Select
                ActiveCell.End(xlToRight).Select
                ActiveSheet.Paste
                Application.CutCopyMode = False
                Calculate
                If c.Value > 1 Then GoTo ResetInnerLoop
            End If
        Next c
        MsgBox "Success"
    End Sub
    
    编辑宏的第7行(
    RngTxt=“A”&CStr(NextRowNum)&“:F”&CStr(NextRowNum)
    )以匹配您的特定表格(而不是
    :F
    ,使用最后的数据列)。这会留下一些空行,但可以通过筛选和删除轻松删除这些空行

    请注意
    您应该在运行宏之前复制工作簿,因为在运行宏之后,您将无法使用
    ctrl
    +
    z
    撤消。希望这有帮助。如果是,请以成功/失败回答。祝你好运

    欢迎来到SO/SE!你有没有尝试过解决这个问题的方法?如果需要,请使用说明更新OP。尝试下面的步骤,希望它们对你有用。我已经使用
    ctrl
    +
    t
    将下面的格式设置为数据表,但是如果您愿意,可以将公式转换为R1C1

    步骤1:添加3个辅助列
  • 对于IdCount,使用
    =COUNTIFS([ID],@ID])
  • 对于RowNum,使用
    =ROW()
  • 对于NextRowSameId,使用
    =IF([@IdCount]>1,IFERROR(聚合(15,6,[RowNum]/([RowNum]>[@RowNum])*([ID]=[@ID])),1),“”),“”)和“”)
  • 然后按
    alt
    +
    f11
    打开VBA编辑器,插入模块,然后输入以下代码

    Sub sanitize()
        Dim NextRow As Range, RngTxt As String, NextRowNum As Integer
        For Each c In Range("data[IdCount]")
    ResetInnerLoop:
            If c.Value > 1 Then
                NextRowNum = c.Offset(0, 2).Value
                RngTxt = "A" & CStr(NextRowNum) & ":F" & CStr(NextRowNum)
                Range(RngTxt).Cut
                c.Offset(0, 0).Select
                ActiveCell.End(xlToRight).Select
                ActiveSheet.Paste
                Application.CutCopyMode = False
                Calculate
                If c.Value > 1 Then GoTo ResetInnerLoop
            End If
        Next c
        MsgBox "Success"
    End Sub
    
    编辑宏的第7行(
    RngTxt=“A”&CStr(NextRowNum)&“:F”&CStr(NextRowNum)
    )以匹配您的特定表格(而不是
    :F
    ,使用最后的数据列)。这会留下一些空行,但可以通过筛选和删除轻松删除这些空行

    请注意 您应该在运行宏之前复制工作簿,因为在运行宏之后,您将无法使用
    ctrl
    +
    z
    撤消。希望这有帮助。如果是,请以成功/失败回答。祝你好运

    Sub sanitize()
        Dim NextRow As Range, RngTxt As String, NextRowNum As Integer
        For Each c In Range("data[IdCount]")
    ResetInnerLoop:
            If c.Value > 1 Then
                NextRowNum = c.Offset(0, 2).Value
                RngTxt = "A" & CStr(NextRowNum) & ":F" & CStr(NextRowNum)
                Range(RngTxt).Cut
                c.Offset(0, 0).Select
                ActiveCell.End(xlToRight).Select
                ActiveSheet.Paste
                Application.CutCopyMode = False
                Calculate
                If c.Value > 1 Then GoTo ResetInnerLoop
            End If
        Next c
        MsgBox "Success"
    End Sub