Private Sub Worksheet_Change(ByVal Target As Range)
' 1. Проверка: изменилась ли ячейка в столбце со статусом (Столбец B = 2)
If Target.Column <> 2 Then Exit Sub
' 2. Проверка: не изменили ли мы заголовок (строка 1)
If Target.Row < 2 Then Exit Sub
' 3. Проверка: если изменили сразу несколько ячеек (макрос сработает только для одной)
If Target.CountLarge > 1 Then Exit Sub
' 4. Проверка: статус действительно "Окончена"? (Trim убирает случайные пробелы)
If Trim(Target.Value) <> "Окончена" Then Exit Sub
' Объявляем переменные
Dim ws1 As Worksheet, ws2 As Worksheet
Dim nextRow As Long
Set ws1 = Me ' Текущий лист (Таблица 1)
' ВНИМАНИЕ: Измените "Лист2" на точное имя вашего второго листа!
Set ws2 = ThisWorkbook.Sheets("Лист2")
' Находим первую пустую строку во второй таблице (по столбцу A)
nextRow = ws2.Cells(ws2.Rows.Count, 1).End(xlUp).Row + 1
' Если вторая таблица абсолютно пустая (нет даже заголовков), ставим в 1 строку
If nextRow = 2 And ws2.Cells(1, 1).Value = "" Then nextRow = 1
' Отключаем события и обновление экрана для ускорения и защиты от зацикливания
Application.EnableEvents = False
Application.ScreenUpdating = False
On Error GoTo CleanUp ' Обработка возможных ошибок
' --- КОПИРОВАНИЕ ВО ВТОРУЮ ТАБЛИЦУ ---
ws2.Cells(nextRow, 1).Value = ws1.Cells(Target.Row, 1).Value ' Номер скважины
ws2.Cells(nextRow, 2).Value = "Окончена" ' Статус
' --- ОЧИСТКА В ПЕРВОЙ ТАБЛИЦЕ ---
ws1.Cells(Target.Row, 1).ClearContents ' Очищаем номер
ws1.Cells(Target.Row, 2).ClearContents ' Очищаем статус
CleanUp:
' Включаем всё обратно
Application.EnableEvents = True
Application.ScreenUpdating = True
' Если произошла ошибка, выводим сообщение
If Err.Number <> 0 Then MsgBox "Произошла ошибка: " & Err.Description, vbCritical, "Ошибка макроса"
End Sub