如何筛选唯一名称并显示唯一名称';使用VBA脚本在excel中创建行数据?

如何筛选唯一名称并显示唯一名称';使用VBA脚本在excel中创建行数据?,excel,vba,Excel,Vba,我想创建VBA脚本,它可以捕获唯一名称并显示唯一名称的行数据 例如: Names Time Cases Tony 06:14:43 54 Peter 06:04:43 54 Tony 06:15:43 54 Tony 06:16:43 54 Peter 06:12:43 54 Tony 06:21:43 54 Tony 06:33:43 54 Ton

我想创建VBA脚本,它可以捕获唯一名称并显示唯一名称的行数据

例如:

Names       Time      Cases 
 Tony       06:14:43   54
 Peter      06:04:43   54
 Tony       06:15:43   54
 Tony       06:16:43   54
 Peter      06:12:43   54
 Tony       06:21:43   54
 Tony       06:33:43   54
 Tony       06:45:43   54
 Peter      06:14:43   54
 Peter      06:21:43   54
 Peter      06:22:43   54
 Tony       06:47:43   54
 Peter      06:33:43   54
 Peter      06:59:43   54
我想找到用户Tony,显示他的工作时间开始时间和结束时间,并显示Tony处理了多少个案例。 彼得也是

你能给我一些建议吗

我试过这样的方法:

Sub test()

    Dim values As Variant
    values = Sheet1.Range("AL3:AL600").Value2 

    'Add a reference to Microsoft Scripting Runtime
    Dim dic As Scripting.Dictionary
    Set dic = New Scripting.Dictionary

    'Set the comparison mode to case-sensitive
    dic.CompareMode = BinaryCompare

    Dim valCounter As Long
    For valCounter = LBound(values) To UBound(values)
        'Check if the name is already in the dictionary
        If Not dic.Exists(values(valCounter, 1)) Then
            'Add the new name as a key, along with a dummy value of 0
            dic.Add values(valCounter, 1), 0
        End If
    Next valCounter

    'Extract the dictionary's keys as a 1D array
    Dim result As Variant
    result = dic.Keys

    Worksheets.Add

    Range("A3:A20").Value = result

End Sub

我可以获得唯一的名称,但我不知道如何提取唯一的名称行数据。

沿着这些思路做一些事情可能会有所帮助

Sub testing()

Dim arrTemp() As Variant
Dim lngCount As Long
Dim lngLoop As Long

arrTemp = getTimes("Tony", ActiveSheet.Range("A2:b15"))

lngCount = UBound(arrTemp)

For lngLoop = 0 To lngCount
    Range("g1").Offset(lngLoop, 0).Value = arrTemp(lngLoop)
Next lngLoop

Erase arrTemp

End Sub

Function getTimes(strLookFor As String, _
                    rngLookAt As Excel.Range, _
                    Optional lngColumnForTimeOffset As Long = 1) As Variant()

Dim rngInspect As Excel.Range
Dim dicAnalysis As New Scripting.Dictionary



For Each rngInspect In rngLookAt.Columns(1).Cells

    If rngInspect = strLookFor Then
        dicAnalysis.Add CStr(dicAnalysis.Count), _
                        CDate(rngInspect.Offset(0, lngColumnForTimeOffset).Text)
    End If

Next rngInspect

getTimes = dicAnalysis.Items()

End Function

看起来不错。如何筛选多个名称?假设我想看看托尼和彼得的时代。为什么不使用一个过滤器呢?@RonRosenfeld是的,按名称和时间对数据进行排序,然后就在那里了