Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Как отобразить количество повторных записей в ListBox
 
Доброго времени уважаемые жители планеты!
Столкнулся с проблемой следующего характера:
Есть столбец со значениями которые могут повторяться много раз. Данные столбца вывожу в ListBox благодаря макросу:
Код
Sub GetListBox()
    Dim AllCells As Range, rCell As Range, NoDupes As New Collection, i As Long, j As Long
    Dim Swap1, Swap2, Item
    'Элементы находятся в столбце A
    Set AllCells = ActiveSheet.Range("A1:A" & ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row)
    'заполняем коллекцию элементами без повторений
    On Error Resume Next
    For Each rCell In AllCells
        NoDupes.Add rCell.Value, CStr(rCell.Value)
    Next rCell
    On Error GoTo 0
    'Сортируем элементы коллекции по возрастанию
    For i = 1 To NoDupes.Count - 1
        For j = i + 1 To NoDupes.Count
            If NoDupes(i) > NoDupes(j) Then
                Swap1 = NoDupes(i): Swap2 = NoDupes(j)
                NoDupes.Add Swap1, Before:=j: NoDupes.Add Swap2, Before:=i
                NoDupes.Remove i + 1: NoDupes.Remove j + 1
            End If
        Next j
    Next i
    With NoDupes
        ReDim Arr(1 To .Count)
        For i = 1 To .Count
            Arr(i) = .Item(i)
        Next
    End With
    UserForm1.ListBox1.List = Arr
End Sub
Подскажите пожалуйста, как отобразить количество повторных записей столбца около каждой строки в ListBox?
Заранее всем спасибо за помощь!
 
Правда без сортировки, это уже сами
Код
Sub GetListBox()
    Dim a()
    Dim i&
    Dim key_
'-----------
    a = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row).Value
    With CreateObject("Scripting.Dictionary")
        For i = 1 To UBound(a)
            .Item(a(i, 1)) = .Item(a(i, 1)) + 1
        Next
        For Each key_ In .Keys
            UserForm1.ListBox1.AddItem key_ & " (" & .Item(key_) & ")"
        Next
    End With
End Sub
Изменено: kalbasiatka - 26 Мар 2015 10:26:17
 
kalbasiatka! Спасибо Вам за помощь! Вроде бы все так... Проблема в том, что далее согласно отобранных значений в ListBox, я сортирую данные в листе (отбирая только необходимые). А так, как подобных значений, как Москва (8) в листе нет, то и сортировка не получается. Скажите, а можно ли количество повторений как нибудь вывести во второй столбец ListBox?
Заранее спасибо!
 
Код
Private Sub UserForm_Initialize()
    With ListBox1
        .ColumnCount = 2
        .ColumnWidths = "200;15"
    End With
    Call GetListBox
End Sub

Sub GetListBox()   
    Dim a()
    Dim i&
'-----------
    a = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row).Value
    With CreateObject("Scripting.Dictionary")
        For i = 1 To UBound(a)
            .Item(a(i, 1)) = .Item(a(i, 1)) + 1
        Next
        UserForm1.ListBox1.List = Application.Transpose(Array(.Keys, .Items))
    End With
End Su
Изменено: kalbasiatka - 26 Мар 2015 23:34:04 (рихтовка кода)
 
kalbasiatka! Спасибо Вам огромное! Работает замечательно. )))
 
Погодите, во втором макросе лишнее For Each key_ In .Keys!!!
Оно конечно не мешает, но зачем?
 
Hugo! Спасибо Вам за подсказку.:)
 
Цитата
Hugo написал: Погодите, во втором макросе лишнее
Да, что-то проморгал, исправил.
Страницы: 1
Читают тему (гостей: 1)