Данная функция предназначена для суммирования итогов и подитогов в таблице Excel, если в ячейках находятся сразу 2 значения При суммировании учитывается группировка строк.
Для суммирования несгруппированных строк используется функция СуммаПланФакт, Примеры формул на листе Excel
Код пользовательской функции (UDF): Function СуммаПланФакт(ParamArray args() As Variant) As String Application.Volatile True Dim cell As Range, v1 As Double, v2 As Double For Index = LBound(args) To UBound(args) ' перебираем все диапазоны ячеек If Not IsMissing(args(Index)) Then ' если очередной аргумент присутствует If TypeName(args(Index)) = "Range" Then ' если аргумент - диапазон ячеек For Each cell In args(Index).Cells ' перебираем все ячейки в диапазоне If cell.EntireRow.OutlineLevel = 1 Then arr = Split(cell.Text, vbLf) If UBound(arr) = 1 Then v1txt = Trim(arr(0)): v2txt = Trim(arr(1)) v2txt = Replace(v2txt, "(", ""): v2txt = Replace(v2txt, ")", "") v1txt = Replace(v1txt, ",", "."): v2txt = Replace(v2txt, ",", ".") v1txt = Val(v1txt): v2txt = Val(Trim(v2txt)) v1 = v1 + v1txt: v2 = v2 + v2txt End If End If Next cell End If End If Next Index СуммаПланФакт = СуммаПланФакт & v1 & vbLf & "(" & v2 & ")" End Function Function СуммаПодитоговПланФакт(ParamArray args() As Variant) As String Application.Volatile True Dim cell As Range, v1 As Double, v2 As Double For Index = LBound(args) To UBound(args) ' перебираем все диапазоны ячеек If Not IsMissing(args(Index)) Then ' если очередной аргумент присутствует If TypeName(args(Index)) = "Range" Then ' если аргумент - диапазон ячеек For Each cell In args(Index).Cells ' перебираем все ячейки в диапазоне If cell.EntireRow.OutlineLevel = 2 Then arr = Split(cell.Text, vbLf) If UBound(arr) = 1 Then v1txt = Trim(arr(0)): v2txt = Trim(arr(1)) v2txt = Replace(v2txt, "(", ""): v2txt = Replace(v2txt, ")", "") v1txt = Replace(v1txt, ",", "."): v2txt = Replace(v2txt, ",", ".") v1txt = Val(v1txt): v2txt = Val(Trim(v2txt)) v1 = v1 + v1txt: v2 = v2 + v2txt End If End If Next cell End If End If Next Index СуммаПодитоговПланФакт = СуммаПодитоговПланФакт & v1 & vbLf & "(" & v2 & ")" End Function Единственное отличие функций - в значении параметра OutlineLevel (уровня группировки) обрабатываемых строк. Пример - в прикреплённом файле (обратите внимание на формулы в серых ячейках)
|
|||||||

Комментарии
Отправить комментарий