Удаление дубликатов из комбинированного окна Excel - PullRequest
0 голосов
/ 12 июня 2018

В настоящее время у меня есть несколько полей со списком в пользовательской форме в Excel, которые автоматически заполняют записи в определенных столбцах рабочей книги.Однако эти поля со списком автоматически заполняют дубликаты, и я этого не хочу.Как мне настроить свой код, чтобы он заполнялся только уникальными значениями?Спасибо.

Вот мой код для полей со списком:

   Private Sub UserForm_Initialize()
    With Worksheets("Sheet1")
        txtContractVehicle.List = .Range("E2:E" & .Range("E" & .Rows.Count).End(xlUp).Row).Value
        txtCapability.List = .Range("F2:F" & .Range("F" & .Rows.Count).End(xlUp).Row).Value
        txtAgency.List = .Range("G2:G" & .Range("G" & .Rows.Count).End(xlUp).Row).Value
        txtDepartment.List = .Range("H2:H" & .Range("H" & .Rows.Count).End(xlUp).Row).Value
        txtSocioeconomic.List = .Range("I2:I" & .Range("I" & .Rows.Count).End(xlUp).Row).Value
    End With
End Sub

1 Ответ

0 голосов
/ 12 июня 2018

вы могли бы использовать вспомогательную функцию для "фильтрации" некоторого переданного массива и оставлять уникальные значения только для экземпляра, эксплуатирующего Dictionary object

Function RemoveDuplicates(vals As Variant) As Variant
    Dim val As Variant
    With CreateObject("Scripting.Dictionary")
        For Each val In vals
            .Item(val) = 1
        Next
        RemoveDuplicates = .Keys
    End With
End Function

Private Sub UserForm_Initialize()
    With Worksheets("Sheet1")
        txtContractVehicle.list = RemoveDuplicates(.Range("E2:E" & .Range("E" & .Rows.Count).End(xlUp).row).Value)
        ...
    End With
End Sub
...