Страницы: 1
RSS
Вложенные циклы - Do While ... Loop или From to, Запуск цикла в рамках цикла
 
Доброго дня!

Есть таблица с переменным числом строк (от 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 не позволяет найти выход из моего тупика(((

[img]file:///C:/Users/BPN/Pictures/loop.png[/img]
 
Доброго. А можете файл-пример с своими циклами приложить (а не картинку?). С листа мне трудно код отслеживать, а уж тем более - косяк искать.
Думаю, и другим тоже. :)
Кому решение нужно - тот пример и рисует.
 
Файл больше 100 кб. Подчищу и выложу.
PS правда сильно стыдно за свой нубо код(((
 
файл
 
Эк его... :)
Еще спрошу - на каком листе, в каких строках в зависимости от каких условий какие значения хотите получить?
Например: "...на листе "продажи" на первой пустой строке ниже данных хочу получить суммы по столбцам, начиная со столбца .... в зависимости от условий - строка должна суммироваться, если в столбце .... по этой строке стоит значение....."
Как-то так можете задачу поставить?
Кому решение нужно - тот пример и рисует.
 
Попробуйте так:
Код
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
Я сам - дурнее всякого примера! ...
 
Цитата
kuklp написал:
ColNumStart = 4
'    i = i + 1
Сработало!
Спасибо огромное...

Осталось самому допетрить что да как...
Страницы: 1
Наверх