Доброго времени суток форумчане. Помогите с решением вопроса. Есть диапазон ячеек в котором указано количество панелей и их длина нужно при помощи макроса сделать сложение тех панелей, длина которых меньше 2000, но чтобы полученная путем сложения длина не превышала длину самой большой панели из диапазона. Пример того, что должно получится расписан на втором листе.
Спасибо за пример, но все таки... Мне нужно складывать не сами длины панелей, а длину умножить на количество, но чтобы полученная сумма не превышала максимальную длину в диапазоне, оставшееся количество панелей в строке добавляется к следующей строке.
вы нормально описывать можете что хотите вашему условию соответствует только одна позиция =2000 напротив которой стоит кол-во 4 соответственно 2000*4 = 8000 максимум у вас 6140 и что с этим делать
Извиняюсь за неправильно написанное сообщение длинна которых меньше 2000, т.е. из строки 16 суммируются только 3 панели из 7, остальные 4 суммируются со следующей строкой, но при этом сумма не должна превышать 6140 и так до конца диапазона
youriyk, сделайте вручную, как должен выглядеть конечный результат в таблице, допустим, в той же книге на другом листе. И замените файл в исходном сообщении.
Формула массива (ФМ) вводится Ctrl+Shift+Enter Memento mori
Option Explicit
'https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=111005&TITLE_SEO=111005-summirovat-dliny-2000-summa-ne-dolzhna-prevyshat-porog&MID=921474#message921474
Sub jjj()
Const dLenCondition# = 2000
Dim rngSrcData As Range: Set rngSrcData = [A2:B28]
Dim arrSrcData(): arrSrcData = rngSrcData.Value
Dim dMaxLen#: dMaxLen = WorksheetFunction.Max(rngSrcData.Columns(2))
Dim dSum#: dSum = 0
Dim lCnt&: lCnt = 0
Dim i&, arrOut()
Dim rngRow As Range
For i = 1 To UBound(arrSrcData, 1)
If arrSrcData(i, 2) <= dLenCondition Then
Do While arrSrcData(i, 1) > 0
If dSum + arrSrcData(i, 2) >= dMaxLen Then
lCnt = lCnt + 1
ReDim Preserve arrOut(1 To lCnt)
arrOut(lCnt) = dSum
dSum = 0
End If
dSum = dSum + arrSrcData(i, 2)
arrSrcData(i, 1) = arrSrcData(i, 1) - 1
Loop
End If
Next i
If dSum > 0 Then
lCnt = lCnt + 1
ReDim Preserve arrOut(1 To lCnt)
arrOut(lCnt) = dSum
End If
With Workbooks.Add
With .Worksheets(1)
With .Cells(1, 1).Resize(lCnt)
For i = 1 To lCnt
.Cells(i).Value = arrOut(i)
Next i
End With
End With
End With
End Sub