Вставка формулы по отфильтрованным ячейкам идёт до конца Excel

Автор Посетитель, 11 июля 2024, 15:22

Посетитель


Администратор



Администратор

Если Debug.Print показал правильные номера строк, значит код работает с телом таблицы и не выходит ниже таблицы.

Посетитель

И 0 появляется после прохождение цикла с формулой. Значит формула каким-то образом захватывает эту строку.

Администратор

Строка 4862 не пустая, поэтому она тоже входит в диапазон фильтра.

Посетитель

Так тело же находится в строках 2 - 4861. Как тогда 4862 не пустая ?

Администратор


Посетитель

Да. Как результат просчёта формулы по соседнему столбцу. Но в соседнем столбце в этой строке, как и в других строках, нет ничего. То есть таблица заканчивается последней заполненной данными строкой с номером 4861.

Администратор

Если нажать Ctrl + End, в какую строку переходит курсор? Если дальше, чем нужно, то удалите все строки, которые находятся под таблицей. Возможно в этих строках что-то есть, но это невидимо глазу.

Посетитель

До выполнения макроса = 5313, после выполнения = 5314.
А что там может быть, что невидимо ?

Администратор

Если до запуска макроса нажать Ctrl+End, в какую строку переходит курсор?
Если после макроса нажать Ctrl+End, в какую строку переходит курсор?

Посетитель

Я и написал выше, что до запуска макроса переходит в строку под № 5313, после выполнения макроса, в строку под № 5314.

Администратор

Вы только этот код используете? Или в начале есть ещё ваш код?

Код:
Sub Macro()
 
    Dim cRange As Range
    Dim b As Range
    Dim R As Long
 
    R = Cells(Rows.Count, 1).End(xlUp).row
    Range("H1:H" & R).AutoFilter Field:=1, Criteria1:="=*C*", Operator:=xlFilterValues
    Set cRange = ActiveSheet.AutoFilter.Range.Offset(1).Resize(ActiveSheet.AutoFilter.Range.Rows.Count - 1) _
        .Columns(1).SpecialCells(xlCellTypeVisible).EntireRow
    Debug.Print ActiveCell.Address
    Debug.Print cRange.Address
    For Each b In cRange.Rows
        b.Cells(15).FormulaR1C1 = "=RC[1]*1.08"
    Next

End Sub
[свернуть]

Посетитель

Чисто по Вашему коду после макроса Ctrl+End переводит курсор в строку № 5313.
С моим полным кодом — в строку под № 5314 (я добавляю сверху пустую строку в своём коде).
Только Ваш код показывает последнюю заполненную строку (просто её номер 5313 был до выполнения макроса. А видимый он по счёту 758), а мой код показывает после выполнения и нажатия Ctrl+End пустую строку с № 5314 (там же в коде строки удаляются).