Как отфильтровать уникальное имя и отобразить данные строки уникального имени в Excel, используя скрипт VBA? - PullRequest
0 голосов
/ 12 октября 2019

Я хотел бы создать сценарий 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

Я хочу найти пользователя Тони и отобразить его работуЧасы Время начала и Время окончания и показывают, сколько дел сделал Тони. То же самое с Питером.

Можете ли вы мне посоветовать, пожалуйста?

Я пробовал что-то вроде этого:

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

Я могу получить уникальные имена, но я не знаю, какизвлечь уникальные имена строк данных.

1 Ответ

0 голосов
/ 13 октября 2019

Что-то в этом роде может помочь

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...