Функция VBA, представленная ниже, представляет собой UDF, что означает, что она похожа на обычную функцию листа Excel, но предназначена для выполнения именно того, что вы хотите. Установите его в стандартный кодовый модуль.
Function CountDuplicates(Rng As Range) As Integer
' set a Reference to "Microsoft Scripting Runtime"
Dim Fun As Integer ' function return value
Dim Uniques As Scripting.Dictionary ' list of occurrences
Dim Arr As Variant ' array of all values
Dim C As Long
Set Uniques = CreateObject("Scripting.Dictionary")
Arr = Rng.Value
With Uniques
For C = 1 To UBound(Arr, 2)
If Not IsEmpty(Arr(1, C)) Then
If .Exists(Arr(1, C)) Then
.Item(Arr(1, C)) = .Item(Arr(1, C)) + 1
Else
.Add Arr(1, C), 0
End If
End If
Next C
For C = 0 To .Count - 1
Fun = Fun + .Items(C)
Next C
End With
CountDuplicates = Fun
End Function
Стандартный кодовый модуль - это тот, который вы должны добавить в свой проект. Его имя по умолчанию будет похоже на Module1 , но вы можете изменить его на что угодно (неправильные имена синтаксиса будут отклонены). Вызовите функцию из рабочего листа, введя ее вызов в любой ячейке, например.
= CountDuplicates(A2:DD2)
Эта функция вернет количество всех дубликатов, подсчитанных в определенном диапазоне, за исключением уникальных значений. Посмотри на код. Когда элемент обнаружен впервые, против него записывается значение 0. После этого при каждом повторном обнаружении 1 добавляется к числу уже найденных повторений. В конце все значения будут сложены, чтобы вернуть общее количество. Этот метод гарантирует, что все первые вхождения будут засчитаны как 0 (то есть не засчитаны). В возвращаемую сумму включаются только повторы.
Как и в случае с другими функциями Excel, результат будет отображаться в ячейке, содержащей формулу. Вы можете скопировать эту формулу, как и любую другую, то есть оригинал, указанный выше, должен быть в строке 2. Если вы вставите ее в другом месте, рассмотрите использование абсолютной адресации для определения диапазона действия.