Excel 使用三个标准比较数据列表,发现匹配,然后对这些变量的4列求和并删除重复值

Excel 使用三个标准比较数据列表,发现匹配,然后对这些变量的4列求和并删除重复值,excel,vba,Excel,Vba,嗨,程序员们, 在过去的两天里,我一直在Excel Vba中为一个项目工作。我已经做了几乎所有的事情,但我在整合数据时只遇到了一个问题。问题如下所示 1st_Name 2nd_name month Hours_utilized John smith jan 10------> Duplicate 1 Rojer j jan 10 L

嗨,程序员们, 在过去的两天里,我一直在Excel Vba中为一个项目工作。我已经做了几乎所有的事情,但我在整合数据时只遇到了一个问题。问题如下所示

 1st_Name       2nd_name     month     Hours_utilized

 John           smith         jan            10------> Duplicate 1
 Rojer          j             jan            10
 Lucy           burns         jan            15
 John           maccalen      jan            5-------> Duplicate 2
 john           smith         jan            10------> Duplicate 1
 john           maccalen      jan            5 ------> Duplicate 2
 .... And so on Dynamic data
现在我需要使用前3列检查这些数据。在本例中,John smith和maccalen是重复数据。使用VBA,我需要如下输出

第一名第二名月利用小时数

 John           smith         jan             20 -------> Like this
 Roger          j             jan             10
 Lucy           burns         jan             15
 John           maccalen      jan             10---------> Like this added and deleted the duplicate having only one occurrence of the data
 ....
这里john smith有两个条目,因此我需要添加小时数并删除重复数据

若第一行中有一个匹配项,那个么检查第二行和第三行,若这是一个匹配项,那个么我需要在这两个数据的第四行中添加值,存储数据并删除重复项


请任何人都能理解并帮助我,任何人都能为此开发一个Excel宏。你们会救我的命。提前感谢

行开始最后一行新行初始化为适当的行索引。我已经好几年没做VBA宏了,希望这会有所帮助

For i = row_start To lastRow
    full_name = objWorkbook.Sheets("Sheet1").Cells.Item(i, "A") & " " & _
        objWorkbook.Sheets("Sheet1").Cells.Item(i, "B")
    For j = row_start To lastRow
        temp_Name = objWorkbook.Sheets("Sheet1").Cells.Item(j, "A") & " " & _
        objWorkbook.Sheets("Sheet1").Cells.Item(j, "B")
        If temp_Name = full_name Then
            hours_utilized = hours_utilized + objWorkbook.Sheets("Sheet1").Cells.Item(j, "D") + 0
        End If
    Next j


    objWorkbook.Sheets("Sheet1").Cells.Item(newrow, "A").Value = objWorkbook.Sheets("Sheet1").Cells.Item(i, "A")
    objWorkbook.Sheets("Sheet1").Cells.Item(newrow, "B").Value = objWorkbook.Sheets("Sheet1").Cells.Item(i, "B")
    objWorkbook.Sheets("Sheet1").Cells.Item(newrow, "C").Value = objWorkbook.Sheets("Sheet1").Cells.Item(i, "C")
    objWorkbook.Sheets("Sheet1").Cells.Item(newrow, "D").Value = hours_utilized

    hours_utilized = 0
    newrow = newrow + 1

Next i

下面的代码可能有效

Private Sub CommandButton1_Click()
    Dim intRow1 As Integer
    Dim intRow2 As Integer
    Dim strNameSurname1 As String
    Dim strNameSurname2 As String
    intRow1 = 1 'The first row the data starts
    intRow2 = intRow1 + 1

    With Worksheets("Sheet1")
        Do While .Cells(intRow1, 1).Value <> Empty
            Do While .Cells(intRow2, 1).Value <> Empty
                strNameSurname1 = CStr(.Cells(intRow1, 1).Value) & CStr(.Cells(intRow1, 2).Value)
                strNameSurname2 = CStr(.Cells(intRow2, 1).Value) & CStr(.Cells(intRow2, 2).Value)
                If strNameSurname1 = strNameSurname2 Then
                    .Cells(intRow1, 4).Value = .Cells(intRow1, 4).Value + .Cells(intRow2, 4).Value
                    .Rows(intRow2).Delete
                    intRow2 = intRow2 - 1
                End If
                intRow2 = intRow2 + 1
            Loop
            intRow1 = intRow1 + 1
            intRow2 = intRow1 + 1
        Loop
    End With
End Sub
Private子命令按钮1\u单击()
Dim intRow1作为整数
作为整数的Dim intRow2
将strNames1变为字符串
作为字符串的Dim strNameSurname2
intRow1=1'数据开始的第一行
intRow2=intRow1+1
带工作表(“表1”)
Do While.Cells(intRow1,1).值为空
Do While.Cells(intRow2,1).Value为空
strNameSurname1=CStr(.Cells(intRow1,1).Value)和CStr(.Cells(intRow1,2).Value)
strNameSurname2=CStr(.Cells(intRow2,1).Value)和CStr(.Cells(intRow2,2).Value)
如果strNameSurname1=strNameSurname2,则
.Cells(intRow1,4).值=.Cells(intRow1,4).值+.Cells(intRow2,4).值
.行(介绍2).删除
intRow2=intRow2-1
如果结束
intRow2=intRow2+1
环
intRow1=intRow1+1
intRow2=intRow1+1
环
以
端接头

develope-到目前为止,您还没有提出任何宏。只需连接UCase函数,就可以获得唯一的id。设置一个数据透视表,您就可以捕捉重复的数据。我是宏新手。你说的我什么都不懂。我是说我两天前才开始用这个。我不能确切地指出该做什么或如何做。请你帮我完成这个程序好吗?再次感谢你的快速回放文件。是的,我看到了,但我需要一个宏。我需要一个VBA程序来自动完成这项工作。非常感谢您的帮助。我明天早上会用主数据检查这项工作,并会让您知道它是如何工作的。但到目前为止,它与我拥有的示例数据配合得非常好。感谢mate的帮助。
strNames1=CStr(.Cells(intRow1,1.Value)&CStr(.Cells(intRow1,2.Value)strName2=CStr(.Cells(intRow2,1.Value)&CStr(.Cells(intRow2,2.Value)
你能帮我理解这行代码的意思吗谢谢你的帮助。我还没有签出这个代码。但是我会根据你的建议来开发代码。我很难理解你的代码,这就是为什么要花时间使用它。再次感谢你的帮助。。。。