Уникальный счетчик нулей
Если у вас нет аллергии c на VBA, вот гибкий UDF. Строки 1-3
показывают, что достаточно выбрать любую ячейку в качестве второго аргумента, если она находится в столбце Sales
. Строки 4-5
показывают, что то же самое недопустимо для столбца Products
. Если для третьего аргумента установлено значение TRUE
, строки 6-8
показывают, что разрешено указывать столбец Products
, используя только ячейку, если она проверяется первой. Строка 8
показывает, как Product_D
не учитывается. Строка 9
показывает поведение вне границ (0
).

Option Explicit
Function Unique0Count(UniqueRange As Range, ValueRange As Range, _
Optional calculateLastCell As Boolean = False) As Long
Dim dict As Object ' Dictionary Object
Dim Key As Variant ' Dictionary Key (For Each Control Variable)
Dim rng As Range ' Unique Range, Unique Last Cell Range,
' Value Range
Dim Unique As Variant ' Unique Array
Dim Value As Variant ' Value Array
Dim i As Long ' Unique/Value Array Elements (Rows) Counter
' Write values from Unique Range to Unique Array.
If Not calculateLastCell Then
Set rng = UniqueRange.Columns(1)
Else
Set rng = Columns(UniqueRange.Column).Find(What:="*", _
LookIn:=xlFormulas, SearchDirection:=xlPrevious)
If rng Is Nothing Then Exit Function ' No data in column.
If rng.Row < UniqueRange.Row Then Exit Function
Set rng = Range(UniqueRange.Cells(1), rng)
End If
Unique = rng
' Write values from Value Range to Value Array.
Set rng = Cells(rng.Row, ValueRange.Column).Resize(rng.Rows.Count)
Value = rng
' Create a reference to the Dictionary Object(Late Binding).
Set dict = CreateObject("Scripting.Dictionary")
' Loop through elements (rows) of Unique Array.
For i = 1 To UBound(Unique)
' Check if value in current row of Source Array is NOT "".
If Unique(i, 1) <> "" Then
' Write values of Unque Array to the Key of the Dictionary
' and sum the corresponding values of Value Array for each
' unique element to the Dictionary.
dict(Unique(i, 1)) = dict(Unique(i, 1)) + Value(i, 1)
End If
Next
' Calculate the number of items containing value 0.
For Each Key In dict.keys
If dict(Key) = 0 Then Unique0Count = Unique0Count + 1
Next Key
End Function