Философия Специального Анализа (NEW)

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Философия Специального Анализа (NEW) » Настройка MS под аналитику » Количество уникальных значений Excel


Количество уникальных значений Excel

Сообщений 1 страница 4 из 4

1

Приветствую, уважаемые коллеги!
Не знаю, будет ли уместна эта тема здесь, но всё же)
Иногда у меня возникала необходимость подсчитать количество повторений в массиве данных.
Например имеется столбец:

1234
1234
1234
1234
1234
123
123
12

Требуемый результат:
1234 - 5
123 - 2
12 - 1

при кажущейся простоте, сходу решить данную проблему у меня не вышло, поэтому после поисков в сети
нашёлся достаточно интересный макрос под Excel 2003 (соответственно имеется ограничение в 65 тыс. строк), который данную задачу решает:
(удалил ссылку - так как неизвестные макросы могут содержать очень неприятные вещи - можете выложить здесь "тело макроса" и те, кто захочет может воспользоваться - Администратор)

Прошу прощения!)))
Вот код VBA:

Option Explicit

' Процедура создания списка уникальных элементов с их количеством
Sub AutoUniqCount(Target As Range)
 
  Const TopCellSrc = "A1"   ' Первая ячейка списка
  Const TopCellDest = "C1"  ' Первая ячейка отчета
 
  Dim x, s$, Rng1 As Range, Rng2 As Range
 
  Set Rng1 = Range(TopCellSrc, Cells(Rows.Count, Left(TopCellSrc, 1)).End(xlUp))
  Set Rng2 = Range(TopCellDest, Cells(Rows.Count, Left(TopCellDest, 1)).End(xlUp))
  If Intersect(Target, Rng1.EntireColumn) Is Nothing And Intersect(Target, Rng2.Resize(, 2).EntireColumn) Is Nothing Then Exit Sub
 
  On Error GoTo exit_
  Application.EnableEvents = False
 
  ' Очистить отчет
  Rng2.Resize(, 2).ClearContents
 
  ' Создать новый отчет
  With CreateObject("Scripting.Dictionary")
    .CompareMode = 1
    For Each x In Rng1.Value
      If VarType(x) = vbString Then
        s = Trim(x)
        ' Посчитать уникальные элементы в словаре
        If Len(s) Then .Item(s) = .Item(s) + 1
      End If
    Next
    ' Записать новый отчет
    If .Count Then
      Range(TopCellDest).Resize(.Count, 2).Value = WorksheetFunction.Transpose(Array(.Keys, .Items))
    End If
  End With

exit_:
  Application.EnableEvents = True
 
End Sub

' Событие активации листа
Private Sub Worksheet_Activate()
  AutoUniqCount Range(TopCellSrc)
End Sub

' Событие изменения
Private Sub Worksheet_Change(ByVal Target As Range)
  AutoUniqCount Target
End Sub


Плюс хотел бы добавить способ решения данной задачи на SQL
Делается всё простым запросом вида Select `Таблица`.`Столбец`, count(*) from `Таблица` group by `Таблица`.`Столбец`
Соответственно всё зависит от структуры вашей базы - "Таблица" меняете на название таблицы, "Столбец" на интересующий столбец в этой таблице)))
Очень удобно для данных манипуляций применять Navicat, можно экспортировать результат в удобный формат: xls, txt и т.д.)))

Отредактировано JohnRipper (01.11.2016 14:29:33)

+1

2

А вот для любителей VBA другая задачка:
есть таблица, в которой в одной колонке имеется текст, содержащий разные текстовые значения:
http://s5.uploads.ru/t/Y2QTg.jpg
Надо написать код макрос для распределения одинаковых данных в соответствующие ячейки
(например в колонке "Мебель 1" только Шкафы, "Мебель 2" только Стол и т.д.)
Спец аналитики могут представить себе такие ситуации, когда надо из одной колонки неформатированного текста сделать распределение по нескольким колонкам (например приметы)
Особенно если представить, что текст написан не как у меня с разделителями, а просто общим текстом (приметы например)

0

3

Разве задачу ТСа нельзя было решить сводной таблицей?

0

4

White Pterodactile, так зачем vba, если есть кнопка "текст по столбцам"? Можно установить разделителем любой символ и ексель разобьёт по столбцам, учитывая выставленный разделитель
Доброго времени суток.
Поясню нагляднее:
Приметы преступника в колонке: Мужчина, около 50 лет, среднего телосложения, небритый три дня, говорит с акцентом, одет джинсы, куртка, кроссовки Адидас.
Приметы преступника в колонке: Молодой мужчина, атлетического телосложения, но хромает на правую ногу, один глаз косит, волосы рыжие, очки диоптрические, предположительного Гуччи.

Распределите по колонкам приметы по введенным данным около 3000 линий, где каждый полицейский вводил как Бог на душу положит. Вам нужно распределение по колонкам:
1. Пол
2. Возраст
3. Высота
4. Телосложение
5. Прическа
6. Характерные приметы лица
7. Одет
8. Предметы носимые с собой.

Теперь можно представить аналогичное распределение для жертв серийного маньяка, можно распределить описание автотранспорта, замеченного на месте происшествия, способы совершения, где целый комплекс.

0


Вы здесь » Философия Специального Анализа (NEW) » Настройка MS под аналитику » Количество уникальных значений Excel


Рейтинг форумов | Создать форум бесплатно © 2007–2017 «QuadroSystems» LLC