Неправильно работает макрос с переносом строк на другой лист

Автор Посетитель, 21 мая 2023, 16:35

Посетитель

Добрый день! Прошу помощи!
Возникает проблема с макросом такого характера. Есть таблица, на листе 1 15 столбцов и неограниченное кол-во строк. Необходимо, чтобы при вводе значения в столбец F, макрос проверял значение в столбце O той же строки. Если в O значение равное 0, то строка удаляется из листа 1 и переносится на лист 2. Если же значение отличное от 0, то строка остается на месте. Вот макрос:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim lastRow1 As Long, lastRow2 As Long
    Dim i As Long
   
    Set ws1 = ThisWorkbook.Sheets("Лист1")
    Set ws2 = ThisWorkbook.Sheets("Лист2")
    lastRow1 = ws1.Cells(ws1.Rows.Count, "F").End(xlUp).Row

    If Not Intersect(Target, ws1.Range("F:F")) Is Nothing Then
        For i = lastRow1 To 2 Step -1
            If ws1.Cells(i, "O") = 0 Then
                lastRow2 = ws2.Cells(ws2.Rows.Count, "F").End(xlUp).Row
                ws1.Rows(i).Copy ws2.Rows(lastRow2 + 1)
                ws1.Rows(i).Delete
            End If
        Next i
    End If
End Sub

Проблема в том, что при вводе значения в F с нулевым значением в O (например в строке 100) сама строка 100 переносится на лист 2, но удаляются с листа 1 все строки 1-99. При этом нет проблем с строками с ненулевым значением в O.
Заранее спасибо!

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

Написал вам два письма на почту с заголовком "Письмо с Форума по VBA, Excel и Word". Написал именно на почту, а не на форум.

Пустые ячейки есть в столбце O? Эксель считает, что пустые ячейки содержат ноль.

Посетитель

В столбце O применена формула вычитания из столбцов K,M,L, т.е. она всегда с значением. Но и без формул все равно такая же проблема

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

Я тестовый файл сделал, удаляются строки только, если в столбце "O" ноль или пусто.
Нужно смотреть ваш файл.

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

Вот тестовый файл. В столбец A введите "Наим", в столбец "O" введите ноль, затем введите значение в столбец "F". Строка исчезнет.
Если же в столбец "O" ввести не ноль (число или текст), а затем ввести значение в столбец "F", то строка не будет удалена.

Посетитель

Похоже на ту же проблему. Если сделать, например 30 строк с 0 и в столбце F на какой-нибудь 25 строке ввести любое значение, то строки с 0 исчезают в никуда

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

Сделайте в том файле, который я выложил, но не запускайте макрос, а выложите на форуме. Я сам запущу.

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

Или если не хотите выкладывать файл на форум по каким-то причинам, то заполните лист и сделайте скриншот.

Посетитель

Да в том же файле я просто заполнил 30 строк. Если по порядку строку F заполнять, то они переносятся нормально. А если, например, в 20 строчки в F что-то написать, то исчезнут бесследно все что выше с 0. У меня такая же проблема была

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

Всё правильно, ваш макрос просматривает не только одну строку, в которой произошли изменения, а двигается снизу вверх от последней заполненной строки в столбце F и до строки 2. Если в столбце "O" есть ноль, строка удалится.
А вам как надо? Чтобы переносилась только одна строка, в которой пользователь сделал изменения?
Макрос вы писали?

Посетитель

Мне необходимо, чтобы в условной сотне строк, каждая строка индивидуально при вводе значения в F и нулевом O переносилась на лист 2, удаляясь с листа 1.
Например, строка 34 в O будет 0, то я в F пишу что-то и она удаляется с листа 1 и переносится на лист 2. Потом 46 строчку, например, так же хочу убрать с листа 1 и тд
Писала нейросеть)

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

Здесь возможны две ситуации.
Ситуация 1. Пользователь вносит изменения только в одну ячейку в столбце F.
Ситуация 2. Пользователь вносит изменения сразу в несколько ячеек в столбце F. Например, пользователь выделил ячейки F2:F10 и очистил ячейки.

В обеих ситуациях должен запускаться макрос или только когда пользователь вносит изменения только в одну ячейку в столбце F?