Версия для слабовидящих
Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

 

= Мир MS Excel/Подсчет количества дубликатов в столбце - Мир MS Excel

  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Модератор форума: китин, _Boroda_, DrMini  
Подсчет количества дубликатов в столбце
rtv206 Дата: Четверг, 09.05.2019, 17:58 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 131
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Доброго времени суток!
Уважаемые форумчане помогите в решении задачки
Необходимо посчитать количество дубликатов в столбце, которые выделяются условным форматированием
и вывести количество в ячейку
К сообщению приложен файл: 123854.xlsx (9.1 Kb)
 
Ответить
СообщениеДоброго времени суток!
Уважаемые форумчане помогите в решении задачки
Необходимо посчитать количество дубликатов в столбце, которые выделяются условным форматированием
и вывести количество в ячейку

Автор - rtv206
Дата добавления - 09.05.2019 в 17:58
_Boroda_ Дата: Четверг, 09.05.2019, 18:31 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 16912
Репутация: 6616 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Так нужно?
=СУММПРОИЗВ(Ч(СЧЁТЕСЛИ(A1:A99;A1:A99)>1))

А вообще - название темы не очень. Решения есть не только с СЧЁТЕСЛИ. Просто навскидку - ПОИСКПОЗ, ЧАСТОТА, ПРОСМОТР, ...
К сообщению приложен файл: 123854_1.xlsx (9.4 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеТак нужно?
=СУММПРОИЗВ(Ч(СЧЁТЕСЛИ(A1:A99;A1:A99)>1))

А вообще - название темы не очень. Решения есть не только с СЧЁТЕСЛИ. Просто навскидку - ПОИСКПОЗ, ЧАСТОТА, ПРОСМОТР, ...

Автор - _Boroda_
Дата добавления - 09.05.2019 в 18:31
rtv206 Дата: Суббота, 11.05.2019, 21:23 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 131
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
_Boroda_, спасибо, буду тестировать
 
Ответить
Сообщение_Boroda_, спасибо, буду тестировать

Автор - rtv206
Дата добавления - 11.05.2019 в 21:23
rtv206 Дата: Среда, 12.06.2019, 18:58 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 131
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
_Boroda_, При очень больших количествах ячеек, которые необходимо проверять, начинает тормозить Excel.
Есть ли другие варианты? кроме
=СУММПРОИЗВ(Ч(СЧЁТЕСЛИ(A1:A99;A1:A99)>1))


Сообщение отредактировал rtv206 - Среда, 12.06.2019, 18:59
 
Ответить
Сообщение_Boroda_, При очень больших количествах ячеек, которые необходимо проверять, начинает тормозить Excel.
Есть ли другие варианты? кроме
=СУММПРОИЗВ(Ч(СЧЁТЕСЛИ(A1:A99;A1:A99)>1))

Автор - rtv206
Дата добавления - 12.06.2019 в 18:58
_Boroda_ Дата: Среда, 12.06.2019, 22:46 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 16912
Репутация: 6616 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Вариантов много. Но большинство из них тоже тормознутые
Попробуйте так
Кол-во различных неуникальных кодов
=СУММ(--(ЧАСТОТА(A1:A99;A1:A99)>1))

Кол-во "лишних" кодов (в массиве 1,1,2,2,2,2 лишних 4 штуки)
=СЧЁТ(A:A)+СУММ(-(ЧАСТОТА(A1:A99;A1:A99)>0))

Кол-во дубликатов вообще
=СЧЁТ(A:A)+СУММ(-(ЧАСТОТА(A1:A99;A1:A99)>0))-СУММ(-(ЧАСТОТА(A1:A99;A1:A99)>1))

Или, что то же самое
=СЧЁТ(A:A)+СУММ({-1;1}*(ЧАСТОТА(A1:A99;A1:A99)>{0;1}))
К сообщению приложен файл: 123854_5.xlsx (9.8 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеВариантов много. Но большинство из них тоже тормознутые
Попробуйте так
Кол-во различных неуникальных кодов
=СУММ(--(ЧАСТОТА(A1:A99;A1:A99)>1))

Кол-во "лишних" кодов (в массиве 1,1,2,2,2,2 лишних 4 штуки)
=СЧЁТ(A:A)+СУММ(-(ЧАСТОТА(A1:A99;A1:A99)>0))

Кол-во дубликатов вообще
=СЧЁТ(A:A)+СУММ(-(ЧАСТОТА(A1:A99;A1:A99)>0))-СУММ(-(ЧАСТОТА(A1:A99;A1:A99)>1))

Или, что то же самое
=СЧЁТ(A:A)+СУММ({-1;1}*(ЧАСТОТА(A1:A99;A1:A99)>{0;1}))

Автор - _Boroda_
Дата добавления - 12.06.2019 в 22:46
rtv206 Дата: Пятница, 14.06.2019, 11:42 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 131
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
_Boroda_, Спасибо, буду пробовать
 
Ответить
Сообщение_Boroda_, Спасибо, буду пробовать

Автор - rtv206
Дата добавления - 14.06.2019 в 11:42
rtv206 Дата: Четверг, 20.06.2019, 22:55 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 131
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Подскажите, пожалуйста, других способов нет? Очень сильно тормозит при большом количестве значений.
Макросом например считать количество ячеек с условным форматированием?
 
Ответить
СообщениеПодскажите, пожалуйста, других способов нет? Очень сильно тормозит при большом количестве значений.
Макросом например считать количество ячеек с условным форматированием?

Автор - rtv206
Дата добавления - 20.06.2019 в 22:55
sboy Дата: Пятница, 21.06.2019, 09:25 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
Цитата rtv206, 20.06.2019 в 22:55, в сообщении № 7 ( писал(а)):
Кол-во "лишних" кодов

с помощью Power Query

let
    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content][Столбец1],
    dupl = Table.FromRecords({[Дубликаты =List.Count(Источник)-List.Count(List.Distinct(Источник))]})
in
    dupl

К сообщению приложен файл: 7192929.xlsx (18.1 Kb)


Яндекс: 410016850021169
 
Ответить
Сообщение
Цитата rtv206, 20.06.2019 в 22:55, в сообщении № 7 ( писал(а)):
Кол-во "лишних" кодов

с помощью Power Query
[vba]
let    Источник = Excel.CurrentWorkbook(){[Name="Таблица1"]}[Content][Столбец1];    dupl = Тable.FromRecords({[Дубликаты =List.Count(Источник)-List.Count(List.Distinct(Источник))]})in    dupl
[/vba]

Автор - sboy
Дата добавления - 21.06.2019 в 09:25
_Boroda_ Дата: Пятница, 21.06.2019, 11:46 | Сообщение № 9
Группа: Админы
Ранг: Местный житель
Сообщений: 16912
Репутация: 6616 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Ловите макросом с кнопки

Sub KolDub()
    c_ = 1
    r0_ = 1
    n_ = Cells(Rows.Count, c_).End(3).Row - r0_ + 1
    ar = Cells(r0_, c_).Resize(n_)
    Set slov1 = CreateObject("Scripting.Dictionary")
    Set slov2 = CreateObject("Scripting.Dictionary")
    With slov1
        For i = 1 To n_
            If .exists(ar(i, 1)) Then
                z_ = z_ + 1
                aaa = slov2.Item(ar(i, 1))
            Else
                aaa = .Item(ar(i, 1))
            End If
        Next i
    End With
    Cells(1, 6) = z_ + slov2.Count
End Sub

К сообщению приложен файл: 123854_6.xlsm (15.0 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЛовите макросом с кнопки
[vba]
Sub KolDub()    c_ = 1    r0_ = 1    n_ = Cells(Rows.Count, c_).End(3).Row - r0_ + 1    ar = Cells(r0_, c_).Resize(n_)    Set slov1 = CreateObject("Scripting.Dictionary")    Set slov2 = CreateObject("Scripting.Dictionary")    With slov1        For i = 1 To n_            If .exists(ar(i, 1)) Then                z_ = z_ + 1                aaa = slov2.Item(ar(i, 1))            Else                aaa = .Item(ar(i, 1))            End If        Next i    End With    Cells(1, 6) = z_ + slov2.CountEnd Sub
[/vba]

Автор - _Boroda_
Дата добавления - 21.06.2019 в 11:46
rtv206 Дата: Суббота, 22.06.2019, 13:10 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 131
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
_Boroda_, как прописать чтобы поиск дубликатов был в определенном диапазоне?
Например в столбцах c E по Z.
 
Ответить
Сообщение_Boroda_, как прописать чтобы поиск дубликатов был в определенном диапазоне?
Например в столбцах c E по Z.

Автор - rtv206
Дата добавления - 22.06.2019 в 13:10
_Boroda_ Дата: Вторник, 25.06.2019, 09:06 | Сообщение № 11
Группа: Админы
Ранг: Местный житель
Сообщений: 16912
Репутация: 6616 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Если ответов нет, то скорее всего что-то не так в вопросе.
В Вашем вопросе по крайней мере два нетака -
1, Нет файла-примера с данными в столбцах Е:Z
2. Не определено понятие дубликатов в разных столбцах - если в столбце Е значения а,в,в; в столбце F значения с,d,а, то понятно, что в - дубликат, но вот дубликат ли а?


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЕсли ответов нет, то скорее всего что-то не так в вопросе.
В Вашем вопросе по крайней мере два нетака -
1, Нет файла-примера с данными в столбцах Е:Z
2. Не определено понятие дубликатов в разных столбцах - если в столбце Е значения а,в,в; в столбце F значения с,d,а, то понятно, что в - дубликат, но вот дубликат ли а?

Автор - _Boroda_
Дата добавления - 25.06.2019 в 09:06
rtv206 Дата: Вторник, 25.06.2019, 14:49 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 131
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Прикладываю файл примера)
К сообщению приложен файл: 5553643.xlsx (11.6 Kb)
 
Ответить
СообщениеПрикладываю файл примера)

Автор - rtv206
Дата добавления - 25.06.2019 в 14:49
rtv206 Дата: Вторник, 25.06.2019, 14:50 | Сообщение № 13
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 131
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Цитата _Boroda_, 25.06.2019 в 09:06, в сообщении № 11 ( писал(а)):
2. Не определено понятие дубликатов в разных столбцах - если в столбце Е значения а,в,в; в столбце F значения с,d,а, то понятно, что в - дубликат, но вот дубликат ли а?


Да, а тоже является дубликатом.
 
Ответить
Сообщение
Цитата _Boroda_, 25.06.2019 в 09:06, в сообщении № 11 ( писал(а)):
2. Не определено понятие дубликатов в разных столбцах - если в столбце Е значения а,в,в; в столбце F значения с,d,а, то понятно, что в - дубликат, но вот дубликат ли а?


Да, а тоже является дубликатом.

Автор - rtv206
Дата добавления - 25.06.2019 в 14:50
_Boroda_ Дата: Вторник, 25.06.2019, 15:20 | Сообщение № 14
Группа: Админы
Ранг: Местный житель
Сообщений: 16912
Репутация: 6616 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Во, другое дело!
Так хотели?

Sub KolDub()
    c0_ = 5
    nc_ = Cells(1).SpecialCells(xlLastCell).Column - c0_ + 1
    If nc_ < 1 Then Exit Sub
    r0_ = 1
    nr_ = Cells(1).SpecialCells(xlLastCell).Row - r0_ + 1
    If nr_ < 1 Then Exit Sub
    ar = Cells(r0_, c0_).Resize(nr_, nc_)
    Set slov1 = CreateObject("Scripting.Dictionary")
    Set slov2 = CreateObject("Scripting.Dictionary")
    With slov1
        For i = 1 To nr_
            For j = 1 To nc_
                If Not IsEmpty(ar(i, j)) Then
                    If .exists(ar(i, j)) Then
                        z_ = z_ + 1
                        aaa = slov2.Item(ar(i, j))
                    Else
                        aaa = .Item(ar(i, j))
                    End If
                End If
            Next j
        Next i
    End With
    Cells(1, 2) = z_ + slov2.Count
End Sub

К сообщению приложен файл: 5553643_1.xlsm (19.1 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеВо, другое дело!
Так хотели?
[vba]
Sub KolDub()    c0_ = 5    nc_ = Cells(1).SpecialCells(xlLastCell).Column - c0_ + 1    If nc_ < 1 Then Exit Sub    r0_ = 1    nr_ = Cells(1).SpecialCells(xlLastCell).Row - r0_ + 1    If nr_ < 1 Then Exit Sub    ar = Cells(r0_, c0_).Resize(nr_, nc_)    Set slov1 = CreateObject("Scripting.Dictionary")    Set slov2 = CreateObject("Scripting.Dictionary")    With slov1        For i = 1 To nr_            For j = 1 To nc_                If Not IsEmpty(ar(i, j)) Then                    If .exists(ar(i, j)) Then                        z_ = z_ + 1                        aaa = slov2.Item(ar(i, j))                    Else                        aaa = .Item(ar(i, j))                    End If                End If            Next j        Next i    End With    Cells(1, 2) = z_ + slov2.CountEnd Sub
[/vba]

Автор - _Boroda_
Дата добавления - 25.06.2019 в 15:20
rtv206 Дата: Четверг, 27.06.2019, 01:08 | Сообщение № 15
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 131
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
_Boroda_, Спасибо огромное!
Буду тестировать))))
 
Ответить
Сообщение_Boroda_, Спасибо огромное!
Буду тестировать))))

Автор - rtv206
Дата добавления - 27.06.2019 в 01:08
rtv206 Дата: Суббота, 07.12.2019, 17:26 | Сообщение № 16
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 131
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
_Boroda_, при количестве заполненных ячеек 200 тыс, много времени уходит на проверку((
Не подскажете есть ли другой способ, гораздо быстрее?
 
Ответить
Сообщение_Boroda_, при количестве заполненных ячеек 200 тыс, много времени уходит на проверку((
Не подскажете есть ли другой способ, гораздо быстрее?

Автор - rtv206
Дата добавления - 07.12.2019 в 17:26
_Boroda_ Дата: Суббота, 07.12.2019, 20:35 | Сообщение № 17
Группа: Админы
Ранг: Местный житель
Сообщений: 16912
Репутация: 6616 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Много - это сколько? У меня далеко не самая мощная машина, но 10 столбцов по 20 000 ячеек в каждом считает 0,84 секунды

Да, если у Вас в файле есть Условное форматирование на проверку задвоений этих 200 000 ячеек, то уберите его, это как раз причина тормозов


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеМного - это сколько? У меня далеко не самая мощная машина, но 10 столбцов по 20 000 ячеек в каждом считает 0,84 секунды

Да, если у Вас в файле есть Условное форматирование на проверку задвоений этих 200 000 ячеек, то уберите его, это как раз причина тормозов

Автор - _Boroda_
Дата добавления - 07.12.2019 в 20:35
rtv206 Дата: Воскресенье, 08.12.2019, 15:53 | Сообщение № 18
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 131
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
_Boroda_, пончо, спасибо, попробую)
 
Ответить
Сообщение_Boroda_, пончо, спасибо, попробую)

Автор - rtv206
Дата добавления - 08.12.2019 в 15:53
rtv206 Дата: Воскресенье, 08.12.2019, 18:27 | Сообщение № 19
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 131
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
_Boroda_, используя макрос из Сообщение № 14
Количество значений 110236 подсчет дубликатов идет 3,5 минуты.
Все условное форматирование отключено.
Вес файла 600 кБ. Прикладываю ссылку на ГуглДиск
My WebPage
 
Ответить
Сообщение_Boroda_, используя макрос из Сообщение № 14
Количество значений 110236 подсчет дубликатов идет 3,5 минуты.
Все условное форматирование отключено.
Вес файла 600 кБ. Прикладываю ссылку на ГуглДиск
My WebPage

Автор - rtv206
Дата добавления - 08.12.2019 в 18:27
RAN Дата: Воскресенье, 08.12.2019, 22:12 | Сообщение № 20
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Поменял порядок циклов, и погонял. Результат не утешительный.

Sub KolDub()
    Dim t!, tt!
    t = Timer
    c0_ = 5
    nc_ = Cells(1).SpecialCells(xlLastCell).Column - c0_ + 1
    If nc_ < 1 Then Exit Sub
    r0_ = 1
    nr_ = Cells(1).SpecialCells(xlLastCell).Row - r0_ + 1
    If nr_ < 1 Then Exit Sub
    ar = Cells(r0_, c0_).Resize(nr_, nc_)
    Set slov1 = CreateObject("Scripting.Dictionary")
    Set slov2 = CreateObject("Scripting.Dictionary")
    tt = Timer
    With slov1
        For j = 1 To nc_
            For i = 1 To nr_
                If Not IsEmpty(ar(i, j)) Then
                    If .exists(ar(i, j)) Then
                        z_ = z_ + 1
                        aaa = slov2.Item(ar(i, j))
                    Else
                        aaa = .Item(ar(i, j))
                    End If
                End If
            Next
            Debug.Print j & "j    " & Format(Timer - tt, "0.00")
            tt = Timer
            DoEvents
        Next

End With
Debug.Print "end    " & Format(Timer - t, "0.00")
Cells(1, 2) = z_ + slov2.Count
End Sub


1j 0,40
2j 1,16
3j 1,88
4j 2,65
5j 3,53
6j 4,60
7j 5,66
8j 6,51
9j 7,34
10j 8,14
11j 8,98
12j 9,80
13j 10,63
14j 11,53
15j 12,31
16j 13,20
17j 13,98
18j 14,82
19j 15,73
20j 16,47
21j 17,27
22j 18,11
23j 18,92
24j 20,02
25j 22,44
26j 21,63
27j 22,48
28j 19,68
29j 20,22
30j 20,85
31j 21,53
end 392,59
При этом, волею судеб _Boroda_, последние 4 столбца пустые, и время на их обработку меня вообще ставит в тупик.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеПоменял порядок циклов, и погонял. Результат не утешительный.
[vba]
Sub KolDub()    Dim tundefined, ttundefined    t = Timer    c0_ = 5    nc_ = Cells(1).SpecialCells(xlLastCell).Column - c0_ + 1    If nc_ < 1 Then Exit Sub    r0_ = 1    nr_ = Cells(1).SpecialCells(xlLastCell).Row - r0_ + 1    If nr_ < 1 Then Exit Sub    ar = Cells(r0_, c0_).Resize(nr_, nc_)    Set slov1 = CreateObject("Scripting.Dictionary")    Set slov2 = CreateObject("Scripting.Dictionary")    tt = Timer    With slov1        For j = 1 To nc_            For i = 1 To nr_                If Not IsEmpty(ar(i, j)) Then                    If .exists(ar(i, j)) Then                        z_ = z_ + 1                        aaa = slov2.Item(ar(i, j))                    Else                        aaa = .Item(ar(i, j))                    End If                End If            Next            Debug.Print j & "j    " & Format(Timer - tt, "0.00")            tt = Timer            DoEvents        NextEnd WithDebug.Print "end    " & Format(Timer - t, "0.00")Cells(1, 2) = z_ + slov2.CountEnd Sub
[/vba]
1j 0,40
2j 1,16
3j 1,88
4j 2,65
5j 3,53
6j 4,60
7j 5,66
8j 6,51
9j 7,34
10j 8,14
11j 8,98
12j 9,80
13j 10,63
14j 11,53
15j 12,31
16j 13,20
17j 13,98
18j 14,82
19j 15,73
20j 16,47
21j 17,27
22j 18,11
23j 18,92
24j 20,02
25j 22,44
26j 21,63
27j 22,48
28j 19,68
29j 20,22
30j 20,85
31j 21,53
end 392,59
При этом, волею судеб _Boroda_, последние 4 столбца пустые, и время на их обработку меня вообще ставит в тупик.

Автор - RAN
Дата добавления - 08.12.2019 в 22:12
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск:

Рейтинг@Mail.ru Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!