如何在vba中向一个键添加多个项

如何在vba中向一个键添加多个项,vba,excel,Vba,Excel,我是vba新手,我试图制作一个程序来向一个键添加多个项 例如: 桌子 然后,如果名称重复,则将列值设置为前一个…如: Name Date Time Date Time XYZ 20 4 22 6 ABC 21 5 我已经为单个项目值排序并添加

我是vba新手,我试图制作一个程序来向一个键添加多个项

例如:

桌子

然后,如果名称重复,则将列值设置为前一个…如:

Name              Date             Time            Date          Time
XYZ                20               4               22            6
ABC                21               5
我已经为单个项目值排序并添加了重复值之和,但我发现对于多值项目很难做到这一点。所以请大家帮忙

谢谢

subt()
Sub t()

Application.DisplayAlerts = False

Dim Tempsheet As Worksheet
Dim c As Range


Set Tempsheet = ThisWorkbook.Sheets.Add

With ThisWorkbook.Sheets("sheet1")
     rng = .UsedRange.Address
    .UsedRange.Sort key1:=.Range("b1"), order1:=xlAscending, key2:=.Range("c1"), order2:=xlAscending, Header:=xlYes
    .UsedRange.Columns(1).Copy
    Tempsheet.Range("a1").PasteSpecial (xlPasteValues)
    Tempsheet.Columns(1).RemoveDuplicates Columns:=1, Header:=xlYes

        For Each cell In Tempsheet.Range("a1:a" & Tempsheet.Range("a" & Rows.Count).End(xlUp).Row).Cells
            i = i + 1
                If i <> 1 Then
                    With .Range(rng)
                        Set c = .Find(what:=cell.Value, after:=.Range("a1"), LookIn:=xlValues, lookat:=xlWhole)
                        firstAddress = c.Address
                            If Not c Is Nothing Then
                                Do
                                    j = j + 1
                                        If j <> 1 Then
                                            k = k + 1
                                            .Range(c.Offset(0, 1), c.Offset(0, 2)).Copy
                                            .Range(firstAddress).Offset(0, (k * 2) + 1).PasteSpecial (xlPasteValues)
                                            .Range(firstAddress).Offset(-1, (k * 2) + 1) = "Date"
                                            .Range(firstAddress).Offset(-1, (k * 2) + 2) = "Time"
                                            c.EntireRow.ClearContents
                                        End If
                                    Set c = .FindNext(c)
                                Loop While Not c Is Nothing And c.Address <> firstAddress
                            End If

                    End With

                End If
                        j = 0
        Next cell
    .UsedRange.Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
Tempsheet.Delete
End Sub
Application.DisplayAlerts=False 将临时工作表设置为工作表 调光范围 Set Tempsheet=thisvoolk.Sheets.Add 使用此工作簿。工作表(“工作表1”) rng=.UsedRange.Address .UsedRange.Sort key1:=.Range(“b1”),order1:=xlAscending,key2:=.Range(“c1”),order2:=xlAscending,Header:=xlYes .UsedRange.Columns(1).复制 Tempsheet.Range(“a1”).PasteSpecial(XLPasteValue) Tempsheet.Columns(1).RemovedUpplicates列:=1,标题:=xlYes 对于Tempsheet.Range(“a1:a”和Tempsheet.Range(“a”和Rows.Count).End(xlUp.Row).单元格中的每个单元格 i=i+1 如果我是1那么 带.量程(rng) 设置c=.Find(what:=cell.Value,after:=.Range(“a1”),LookIn:=xlValues,lookat:=xlother) firstAddress=c.地址 如果不是,那么c什么都不是 做 j=j+1 如果j1那么 k=k+1 .范围(c.偏移量(0,1),c.偏移量(0,2)).复制 .Range(firstAddress).Offset(0,(k*2)+1.PasteSpecial(xlPasteValues) .Range(firstAddress).Offset(-1,(k*2)+1)=“日期” .Range(firstAddress).Offset(-1,(k*2)+2)=“时间” c、 EntireRow.ClearContents 如果结束 集合c=.FindNext(c) 循环而不是c为Nothing,c.Address为firstAddress 如果结束 以 如果结束 j=0 下一个细胞 .UsedRange.Columns(1).特殊单元格(xlCellTypeBlanks).EntireRow.Delete 以 删除临时工作表 端接头
您正在为Excel功能的基本部分编写一个精巧的程序。它被称为透视表


很抱歉,我已经讲了三遍了,但仍然无法理解您想要实现的目标/您的问题是什么。您可能想详细介绍您正在尝试做什么以及到目前为止您已经做了什么。您需要发布您已经尝试制作的代码。很抱歉,我的问题不清楚。我想做的只是…如果名称列中出现重复的名称(在上面的例子中是XYZ),那么我想通过将其项目(在上面的表格中是日期和时间列)添加到原始行来替换该重复行..这样就没有重复的名称。因此,由于XYZ有2条记录,第二条记录将添加到第一条记录中,但在不同的列中。我已经搜索了很多次,但不知道如何进行搜索。很抱歉,此代码不适用于2条以上的重复记录。但本教程没有介绍如何将键的项添加到上面示例中提到的新列中。
Sub t()

Application.DisplayAlerts = False

Dim Tempsheet As Worksheet
Dim c As Range


Set Tempsheet = ThisWorkbook.Sheets.Add

With ThisWorkbook.Sheets("sheet1")
     rng = .UsedRange.Address
    .UsedRange.Sort key1:=.Range("b1"), order1:=xlAscending, key2:=.Range("c1"), order2:=xlAscending, Header:=xlYes
    .UsedRange.Columns(1).Copy
    Tempsheet.Range("a1").PasteSpecial (xlPasteValues)
    Tempsheet.Columns(1).RemoveDuplicates Columns:=1, Header:=xlYes

        For Each cell In Tempsheet.Range("a1:a" & Tempsheet.Range("a" & Rows.Count).End(xlUp).Row).Cells
            i = i + 1
                If i <> 1 Then
                    With .Range(rng)
                        Set c = .Find(what:=cell.Value, after:=.Range("a1"), LookIn:=xlValues, lookat:=xlWhole)
                        firstAddress = c.Address
                            If Not c Is Nothing Then
                                Do
                                    j = j + 1
                                        If j <> 1 Then
                                            k = k + 1
                                            .Range(c.Offset(0, 1), c.Offset(0, 2)).Copy
                                            .Range(firstAddress).Offset(0, (k * 2) + 1).PasteSpecial (xlPasteValues)
                                            .Range(firstAddress).Offset(-1, (k * 2) + 1) = "Date"
                                            .Range(firstAddress).Offset(-1, (k * 2) + 2) = "Time"
                                            c.EntireRow.ClearContents
                                        End If
                                    Set c = .FindNext(c)
                                Loop While Not c Is Nothing And c.Address <> firstAddress
                            End If

                    End With

                End If
                        j = 0
        Next cell
    .UsedRange.Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
Tempsheet.Delete
End Sub