Цитата |
---|
Macedon написал: Задача макроса: собрать ненулевые значения из колонки H, и записать элементы к которым относятся (в данном случае A, B и С). |
Оптимально использовать макрос со словарём (погуглите на тему использование объекта Scripting.Dictionary в VBA). Столбец G - в ключи, столбец H - в значения (при наличии элемента с заданным ключом в словаре, значения просуммировать).
Вывести получившийся словарь в нужный диапазон ячеек.
Если обязательна запись на выходе формул, а не значений, то в значения словаря добавлять порядковый номер элемента.
Либо записать диапазон G7:H16 в массив и перебрать одним циклом For...Next. Два цикла, как у Вас, тут абсолютно без надобности, т.к. столбцов всего два и они отличаются на единицу.
Цитата |
---|
Macedon написал: Мне нужно, чтобы макрос шел по строкам вперед, без i=i+1 он оставит значение i прежним. А j=j-1, контролирует заполнение ячеек подряд в столбце, если не будет этой строки будут "бланки". |
С чего Вы взяли? Цикл For... Next -
перебирает все целые значения индекса от начального до конечного. Если Вам нужно, чтобы цикл "перепрыгивал" через значение, то просто для него укажите параметр Step, а не меняйте индекс внутри цикла:
Код |
---|
For i = 0 To 10
i = i + 1
Next i
'Равносильно:
For i = 0 To 10 Step 2
'i = 0, 2, 4, ... 10
Next i
|
Цитата |
---|
Macedon написал: Без этой проверки у меня цикл "зацикливался" (не мог завершиться). |
Немного уличной магии в Вашем коде, или почему "зацикливается цикл":
Код |
---|
For j = 1 To 10 'пока j не равно 10, выполняется j = j + 1 на каждом проходе цикла.
j = j - 1 'Возврат индекса на значение при прошлом шаге.
Next j
|
Итог: зависание цикла. Вывод: не надо в теле цикла For...Next менять переменную его индекса. Если нужно сделать изменение индекса явным и выходить из него по условию, используйте циклы Do...While или While...Wend.