VBA Excel автозаповнення

Автоматичне заповнення комірок поточною датою в VBA Excel

Один з підписників на моєму 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.

Книга Excel

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

Excel розробник

3. Натискаємо Записати макрос і у вікні що з'явилося клікаємо OK, щоб створити новий макрос.

Макрос Excel

4. Одразу тиснемо Зупинити запис. Нам просто потрібно створити пустий макрос в який ми потім вставимо свій код.

Excel макрос

5. Далі клікаємо по Макроси.

Макроси Excel

6. Обираємо щойно створений нами макрос і натискаємо Змінити.

Змінити макрос

7. Вставляємо зазначений вище код у вікно що з'явилося (той код що був раніше у вікні – замінюємо/видаляємо).

VBA Excel код

8. Натискаємо Save і зберігаємо Книгу із підтримкою макросів.

Книга Excel із підтримкою макросів

Але зараз, наш код буде працювати некоректно. Якщо ми вносимо якісь дані в комірки стовпчика A, то нічого не відбувається. Якщо ж ми запускаємо макрос, то поточна дата додається тільки в останню заповнену комірку стовпчика A.

Отже, потрібно зробити ще так, щоб наш макрос запускався автоматично кожного разу, коли користувач змінює будь-яку комірку стовпчика A.

Для цього

1. На вкладці Розробник, клікаємо по іконці Visual Basic.

Visual Basic Excel

2. У вікні Project робимо подвійний клік по Аркуш 1 (якщо автозапуск макроса потрібно встановити саме для цього аркуша).

Редактор коду VBA

3. У вікні редагування коду вибираємо об'єкт Worksheet.

Worksheet VBA Excel

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

Main Menu