Один из подписчиков на моем YouTube канале, после просмотра урока Автоматическое добавление даты в ячейку Excel при изменении другой ячейки, написал комментарий следующего содержания:
"Я сканирую штрихкод товаров, а их много, и хочу, чтобы к каждому товару рядом автоматически записывалось время сканирования". То есть, перед нами стоит задача сделать так, чтобы когда пользователь ввел какие-то данные в любую ячейку колонки A, то рядом, в столбце B, в той же строке, должна появиться текущая дата.
Автоматическое заполнение ячеек текущей датой
Для решения поставленной задачи, нам нужно написать код VBA, который будет отслеживать последнюю заполненную ячейку в колонке A, будет определять номер строки этой ячейки и вставлять текущую дату в ту же строку, но уже в ячейку B.
Для этого создадим макрос со следующим кодом:
Sub ДодатиДату()
Dim lastRow As Long
lastRow = Cells.Find(What:="*", After:=Range("A1"), LookAt:=xlPart, _
LookIn:=xlFormulas, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, _
MatchCase:=False).row
If lastRow >= 1 Then 'якщо є введені дані в колонці A
Range("B" & lastRow).Value = Date 'запис поточної дати в комірку поруч з останньою введеною коміркою в колонці A
End If
End Sub
Пошаговые действия
1. Открываем Книгу Excel.

2. Переходим на Ленте на вкладку Разработчик.

3. Нажимаем Записать макрос и в появившемся окне кликаем OK, чтобы создать новый макрос.

4. Сразу же нажимаем Остановить запись. Нам просто нужно создать пустой макрос, в который мы потом вставим свой код.

5. Дальше кликаем по Макросы.

6. Выбираем только что созданный нами макрос и нажимаем Изменить.

7. Вставляем указанный выше код в появившееся окно (тот код который в был ранее в окне – заменяем/удаляем).

8. Нажимаем Save и сохраняем Книгу с поддержкой макросов.

Но сейчас наш код будет работать некорректно. Если мы вносим какие-нибудь данные в ячейки столбца A, то ничего не происходит. Если же мы запускаем макрос, то текущая дата добавляется только в последнюю заполненную ячейку столбца A.
Следовательно, нужно сделать еще так, чтобы наш макрос запускался автоматически каждый раз, когда пользователь меняет любую ячейку столбика. A.
Для этого
1. На вкладке Разработчик, кликаем по иконке Visual Basic.

2. В окне Project делаем двойной клик по Лист 1 (если автозапуск макроса нужно установить именно для этого листа).

3. В открывшемся окне редактирования кода выбираем объект Worksheet.

4. Меняем тот код, который появился в окне на тот который указан ниже.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lastRow As Long
Dim updatedCell As Range
'Перевіряємо, чи змінено комірку в колонці A
If Not Intersect(Target, Range("A:A")) Is Nothing Then
'Знаходимо останню заповнену комірку в колонці A
lastRow = Cells(Rows.Count, "A").End(xlUp).row
'Перевіряємо, чи змінена комірка знаходиться в діапазоні з введеними даними в колонці A
If Target.row <= lastRow Then
'Знаходимо комірку поруч зі зміненою коміркою в колонці A
Set updatedCell = Cells(Target.row, "B")
'Записуємо поточну дату поруч зі зміненою коміркою
updatedCell.Value = Date
End If
End If
End Sub
Ещё один вариант кода
Если вас не устраивает указанный выше вариант, то можете попробовать вот этот код:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A:A")) Is Nothing Then ' якщо змінено якусь комірку в стовпчику A
Dim row As Long
row = Target.row ' отримуємо номер рядка зміненої комірки
Range("B" & row).Value = Date ' записуємо поточну дату в комірку поруч з зміненою коміркою
End If
End Sub
Данную запись нужно сделать в коде письма (Sheet module), на котором происходят изменения. Макрос создавать не нужно. Достаточно только этого кода, который будет реагировать на изменения в ячейках листа.
