计算重复项并复制结果

时间:2018-07-26 15:31:30

标签: excel vba count duplicates

我运行着一个绩效数据库,并且陷入了跟踪重复犯规者的困境。

在结果表中包含所有数据,我想创建一个遍历结果的宏,将C列过滤到每个人员编号,并计算D列中“失败”结果的次数。

如果他们的计数为2或以上,我希望工作表将其名称在B列中复制,并将工作人员编号在c列中复制到另一张名为“ Flagged”的工作表中的第一行,并在第三列中将失败计数

我的数据从b8行到b10008行,我有300名可以接受评估的员工

谢谢!

2 个答案:

答案 0 :(得分:0)

我建议使用数组并以这种方式循环数据,它应该几乎是即时的(与工作表本身中的循环相比)。

请记住,这还没有经过充分测试,但是它应该使您非常接近要达到的目标:

Sub flagged()

    Dim arrData As Variant, arrFails As Variant
    Dim failCnt As Long, i As Long, j As Long, x As Long, lastRow As Long
    Dim shResults As Worksheet, shFails As Worksheet

    Set shResults = ActiveWorkbook.Sheets("Results")
    Set shFlagged = ActiveWorkbook.Sheets("Flagged")

    ReDim arrFails(0 To 300, 0 To 2)

    arrData = shResults.Range("B8:D10008").Value

    For i = LBound(arrData) To UBound(arrData)
        For j = LBound(arrData) To UBound(arrData)
            If arrData(i, 2) = arrData(j, 2) Then
                If arrData(i, 3) = "FAIL" Then
                    failCnt = failCnt + 1
                End If

                If failCnt >= 2 Then
                    arrFails(x, 0) = arrData(i, 1)
                    arrFails(x, 1) = arrData(i, 2)
                    arrFails(x, 2) = failCnt
                    x = x + 1
                End If

            End If
        Next j
        failCnt = 0
    Next i

    For i = LBound(arrFails) To UBound(arrFails)
        If arrFails(i, 0) <> "" Then
            lastRow = shFlagged.Cells(1, j).End(xlDown).Row
            For j = 1 To 3
                shFlagged.Cells(lastRow + 1, j) = arrFails(i, j)
            Next j
        End If
    Next i

End Sub

编辑:更改了尺寸大小,以容纳3列。另外,我最初是这样做的,目的是按人员编号查找排序的数据,但是由于数据量不大,没关系,所以我相应地编辑了代码。

答案 1 :(得分:0)

将源数据设置为表( Ctrl + T ,单元格处于选定范围内)。添加带有公式的帮助列:

=SUMPRODUCT(--([Fail/Pass]="FAIL"),--([Staff No]=[@[Staff No]]))>=2=SUMPRODUCT(--(D:D="FAIL"),--(C:C=[@[Staff No]]))>=2

使用紧凑的报表布局创建您的数据透视表 Alt + N + V ,并将您的帮助器列添加到页面字段并过滤在True上。将namestaff No添加到行字段并删除小计。

由于它是Excel表,因此您可以添加更多行,并且公式将自动填充。然后,您只需刷新数据透视表即可更新已标记的列表。

数据:

Data


字段:

fields

紧凑的设计布局,没有小计。