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

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

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


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


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

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

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


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


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