Отметка времени в Excel с очень конкретными требованиями

Мне нужна помощь с кодом Excel VBA, который может сделать следующее. Я в лучшем случае начинающий программист на VBA, мне просто нужно кое-что поработать с таблицей, над которой я работаю.

Я знаю, что существует бесчисленное множество вопросов и ответов о кодах временных меток, и я прочитал их ОЧЕНЬ много, но я не могу найти тот, который соответствует моим потребностям. Я часами искал, вот почему я спрашиваю вместо этого. Вот что мне нужно:

  1. Когда ячейка в столбце A изменяется, а соответствующая ячейка в столбце B пуста, отметьте дату ячейкой в ​​столбце B с текущей датой.

  2. Впоследствии, если ячейка в столбце A изменяется и соответствующая ячейка в столбце B не является пустой (поскольку она уже содержит отметку даты из предыдущего изменения столбца A), отметка даты в ячейке в столбце B не должна изменяться., Это включает в себя, если ячейка в столбце A заменяется тем же значением.

  3. Если ячейка в столбце A очищена либо самостоятельно, либо как часть выбора нескольких ячеек и очистки содержимого, отметка даты в ячейке в столбце B не должна изменяться ИЛИ удаляться.

  4. Только если отметка даты очищается вручную в ячейке в столбце B, она должна быть снова помечена датой с текущей датой, если значение соответствующей ячейки в столбце A снова изменено (в основном, сброс).

  5. Первая строка - это метки, поэтому ничего не делайте с ячейками в первой строке.

Надеюсь, я прояснил это достаточно. Если нет, пожалуйста, дайте мне знать. Заранее спасибо за любые ответы, и я извиняюсь, если это было доступно где-то, и я просто не мог найти это.

1 ответ

Решение

Попробуйте следующий код. И, пожалуйста, дайте нам обратную связь, пожалуйста!

Так как вы можете применить изменение ко многим ячейкам одновременно (например, нажав Ctrl+Enter), я использовал цикл для навигации по каждой изменяемой ячейке.

Private Sub Worksheet_Change(ByVal Target As Range)
    For Each cell In Target.Cells
        If cell.Row > 1 And cell.Column = 1 Then
            If cell.Offset(0, 1).Value = "" Then
                cell.Offset(0, 1).Value = Now()
            End If
        End If
    Next
End Sub
Другие вопросы по тегам