Один з підписників на моєму 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) на якому відбуваються зміни. Макрос створювати не потрібно. Достатньо тільки цього коду, який буде реагувати на зміни в комірках листа.