Если вы хотите сохранить свои исходные данные и просто суммировать данные где-то еще, вы можете использовать следующий метод:
Создайте пользовательскую функцию в VB, которая по сути аналогична CONCATENATE, но может бытьиспользуется в формуле массива.Это позволит вам вставить оператор IF для переменной диапазона в функции CONCATENATE.Вот быстрая версия, которую я набросал:
Private Function CCARRAY(rr As Variant, sep As String)
'rr is the range or array of values you want to concatenate. sep is the delimiter.
Dim rra() As Variant
Dim out As String
Dim i As Integer
On Error GoTo EH
rra = rr
out = ""
i = 1
Do While i <= UBound(rra, 1)
If rra(i, 1) <> False Then
out = out & rra(i, 1) & sep
End If
i = i + 1
Loop
out = Left(out, Len(out) - Len(sep))
CCARRAY = out
Exit Function
EH:
rra = rr.Value
Resume Next
End Function
Таким образом, вы можете использовать следующее в этой таблице для суммирования элементов:
{=CCARRAY(IF(A1:A7="Cat1",B1:B7),", ")}
Не забудьте нажимать Ctrl + Shift + Enter при вводеформула.