Есть таблица с переменным числом строк (от 10 до 60) и столбцов (от 6 до 120). Необходимо под ней по критерию проссуммировать значения по всей длине таблицы. Высота таблицы должна соответствовать количеству критериев. Пример таблицы (картинку не смог приклеить почему то).
Попробовал следующие варианты. Ни один не отрабатывает((( Точнее отрабатывает только по вертикали.
Логику закладывал следующую: Цикл перебором заполняет горизонталь, по достижении максимального значения горизонтали переходит к новому значению вертикали, далее горизонталь и т.д.
Код
' определяем общее число строк со значениями на исходной странице
Dim rown As Integer
Sheets("Продажи").Activate
rown = Application.WorksheetFunction.CountA(Range("A:A")) + 1
'Первый столбец массива - фиксированный
Dim ColNumStart As Integer
ColNumStart = 4
'Последний столбец массива - подсчитывает число введенных столбцов с данными
Dim ColNumFinish As Integer
ColNumFinish = Sheets("Intermed").Range("A3").End(xlToRight).Column
' указывает первую строку для подстановки формул
Dim RowNumStart As Integer
RowNumStart = rown + 3
' указывает последнюю строку для подстановки формул
Dim RowNumFinish As Integer
RowNumFinish = rown + 16
Do While RowNumStart <= RowNumFinish
Do While ColNumStart <= ColNumFinish
Cells(RowNumStart, ColNumStart) = WorksheetFunction.SumIfs(Range(Cells(3, ColNumStart), Cells(rown, ColNumStart)), _
Range(Cells(3, 3), Cells(rown, 3)), Cells(RowNumStart, 1))
ColNumStart = ColNumStart + 1
Loop
RowNumStart = RowNumStart + 1
Loop
Этот цикл заполняет только горизонталь и завершается((( Попробовал второй вариант, добавив дополнительную переменную - та же хрень...
Код
' указывает последнюю строку для подстановки формул
Dim RowNumFinish As Integer
RowNumFinish = rown + 16
Dim i As Integer
For i = RowNumStart To RowNumFinish
Do While ColNumStart <= ColNumFinish
Cells(i, ColNumStart) = WorksheetFunction.SumIfs(Range(Cells(3, ColNumStart), Cells(rown, ColNumStart)), _
Range(Cells(3, 3), Cells(rown, 3)), Cells(i, 1))
ColNumStart = ColNumStart + 1
Loop
i = i + 1
Next i
Понимаю, что в какой то мелочи что то упустил. Но не могу понять где и что... Буду очень благодарен за помощь
PS Ответ искал долго и нудно, но наверное ограниченность моих знаний в VBA не позволяет найти выход из моего тупика(((
Доброго. А можете файл-пример с своими циклами приложить (а не картинку?). С листа мне трудно код отслеживать, а уж тем более - косяк искать. Думаю, и другим тоже.
Эк его... Еще спрошу - на каком листе, в каких строках в зависимости от каких условий какие значения хотите получить? Например: "...на листе "продажи" на первой пустой строке ниже данных хочу получить суммы по столбцам, начиная со столбца .... в зависимости от условий - строка должна суммироваться, если в столбце .... по этой строке стоит значение....." Как-то так можете задачу поставить?
For i = RowNumStart To RowNumFinish
Do While ColNumStart <= ColNumFinish
Cells(i, ColNumStart) = WorksheetFunction.SumIfs(Range(Cells(3, ColNumStart), Cells(rown, ColNumStart)), _
Range(Cells(3, 3), Cells(rown, 3)), Cells(i, 1))
ColNumStart = ColNumStart + 1
Loop
ColNumStart = 4
' i = i + 1
Next i