Excel 使用三个标准比较数据列表,发现匹配,然后对这些变量的4列求和并删除重复值
嗨,程序员们, 在过去的两天里,我一直在Excel Vba中为一个项目工作。我已经做了几乎所有的事情,但我在整合数据时只遇到了一个问题。问题如下所示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
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)
你能帮我理解这行代码的意思吗谢谢你的帮助。我还没有签出这个代码。但是我会根据你的建议来开发代码。我很难理解你的代码,这就是为什么要花时间使用它。再次感谢你的帮助。。。。