написал пользовательскую функцию, но хотелось бы стандартными средствами, без VBA вот текст функции:
Code
Function суммгрупп(Diapazon As Range) Dim itog(100) As Integer Dim iCell As Range k = 0 ch = 0 For Each iCell In Diapazon If iCell <> 0 Then k = k + iCell bul = 1 Else If k <> 0 Then itog(ch) = k ch = ch + 1 End If bul = 0 k = 0 End If Next If k <> 0 Then itog(ch) = k End If For i = 0 To ch суммгрупп = суммгрупп + CStr(itog(i)) + " " Next i End Function
написал пользовательскую функцию, но хотелось бы стандартными средствами, без VBA вот текст функции:
Code
Function суммгрупп(Diapazon As Range) Dim itog(100) As Integer Dim iCell As Range k = 0 ch = 0 For Each iCell In Diapazon If iCell <> 0 Then k = k + iCell bul = 1 Else If k <> 0 Then itog(ch) = k ch = ch + 1 End If bul = 0 k = 0 End If Next If k <> 0 Then itog(ch) = k End If For i = 0 To ch суммгрупп = суммгрупп + CStr(itog(i)) + " " Next i End Function
Вот получилось, только пришлось добавить лишние столбцы и строки, да и вообще все как-то коряво получилось, может придумаете как избавиться от промежуточных данных.
Вот получилось, только пришлось добавить лишние столбцы и строки, да и вообще все как-то коряво получилось, может придумаете как избавиться от промежуточных данных.Jhonson
Формуляр, Спасибо, так действительно получше, но у меня исходных строк будет много, с дополнительными строками и столбцами будет слишком громоздко, наверное придется делать на VBA. Посмотрим, может кто еще что подскажет
Формуляр, Спасибо, так действительно получше, но у меня исходных строк будет много, с дополнительными строками и столбцами будет слишком громоздко, наверное придется делать на VBA. Посмотрим, может кто еще что подскажетJhonson
"Ничто не приносит людям столько неприятностей, как разум."
Jhonson, если после исходных данных в строке ничего нет, например, результирующие строки вынесены на др. лист, то удаётся без промежуточных значений получить накопленные суммы. Остаётся только маленький шаг - получить их разность. Но на это ума уже не хватает.
А жаль ...
Jhonson, если после исходных данных в строке ничего нет, например, результирующие строки вынесены на др. лист, то удаётся без промежуточных значений получить накопленные суммы. Остаётся только маленький шаг - получить их разность. Но на это ума уже не хватает.
Public Function SumNum(r As Range) As String Dim a, i&, j&, aa(), tmp& a = r.Value: j = 1 ReDim aa(1 To UBound(a, 2)) For i = 1 To UBound(a, 2) If a(1, i) > 0 Then: tmp = tmp + a(1, i): Else: _ If tmp > 0 Then aa(j) = tmp: tmp = 0: j = j + 1 Next: If tmp > 0 Then aa(j) = tmp SumNum = Trim(Join(aa, " ")) End Function
Мож все же так проще?
Code
Public Function SumNum(r As Range) As String Dim a, i&, j&, aa(), tmp& a = r.Value: j = 1 ReDim aa(1 To UBound(a, 2)) For i = 1 To UBound(a, 2) If a(1, i) > 0 Then: tmp = tmp + a(1, i): Else: _ If tmp > 0 Then aa(j) = tmp: tmp = 0: j = j + 1 Next: If tmp > 0 Then aa(j) = tmp SumNum = Trim(Join(aa, " ")) End Function