Автоматическая вставка текущей даты в ячейку при вводе данных

Предположим, у нас имеется таблица заказов, куда пользователь вводит номер заказа, имя клиента, сумму и т.д. Необходимо сделать так, чтобы при внесении номера заказа в столбец А - в столбце B напротив введенного заказа автоматически появлялись дата и время его занесения:

date_auto_enter3.png

Чтобы реализовать такой ввод даты, нам потребуется простой макрос, который надо добавить в модуль рабочего листа. Для этого щелкните правой кнопкой мыши по ярлычку листа с таблицей и выберите в контекстном меню команду Исходный текст (View code).

В открывшееся окно редактора Visual Basic скопируйте этот текст этого макроса:

Private Sub Worksheet_Change(ByVal Target As Range)
    
    For Each cell In Target   'проходим по всем измененным ячейкам
       If Not Intersect(cell, Range("A2:A100")) Is Nothing Then  'если изменененная ячейка попадает в диапазон A2:A100
            With cell.Offset(0, 1)         'вводим в соседнюю справа ячейку дату
               .Value = Now
               .EntireColumn.AutoFit  'выполняем автоподбор ширины для столбца B, чтобы дата умещалась в ячейке
            End With
       End If
    Next cell
End Sub

При необходимости измените "чувствительный" диапазон "А2:А100" на свой собственный. Если необходимо вставлять дату не в соседний столбец, а правее - подставьте в оператор Offset(0,1) вместо 1 число побольше.

Закройте редактор Visual Basic и попробуйте ввести что-нибудь в диапазон А2:А100. В соседней ячейке тут же появится текущая дата-время!

Ссылки по теме

 


Страницы: 1  2  3  4  5  6  
01.06.2015 15:04:55
Добрый день.
Хочу выразить свою признательность автору за прекрасный интернет-ресурс. Спасибо !

Конечно же, "не просто так" я пишу свой комент :D и мне "что-то нужно"...
Макрос прекрасен и экономит кучу времени и нервов. Но, у меня возник вопрос в моём конкретном случае т.к. я совсем ни чего не понимаю в макросах. Ваш макрос записан в следующем виде...

Private Sub Worksheet_Change(ByVal Target As Range)

For Each cell In Target
 If Not Intersect(cell, Range("A6:A300")) Is Nothing Then
  With Range("C" & cell.Row)
   Application.Calculation = xlManual
   .Value = Now
     Application.Calculation = xlAutomatic
.EntireColumn.AutoFit
     End With
    End If
   Next cell
End Sub 

Использую "Умную таблицу" (Format as Table) и всё прекрасно работает без задержек, но есть маленький пунктик который нервирует моих пользователей таблицей - после заполнения полей в строке и нажатии "Tab", что-бы ввести новую строку, макрос естествено "определяет" изменения и тут же прописывает дату и время в колонку "С". Это от макроса и требуется, но только в процессе заполнения полей в "А"... Как мне устранить этот маленький недочёт ?!
Заранее благодарен.
11.06.2015 22:43:56
Здравствуйте.
Подскажите, как к описанному макросу добавить возможность при вводе нового значения в соседнем столбике считать временной интервал между введенным и предыдущим значениями (и при вводе первого значения в этом столбе ставить просто нулевой интервал)?
15.06.2015 12:58:11
Добрый день! Во-первых, огромное спасибо за Вашу работу! Реальное помогает! Во-вторых, нужна помощь - на Excel 2013 32-bit все работало отлично, но на днях мигрировал на 64-bit. И тут случилось :cry: . Что делать, куда бежать и как с этим теперь жить? За ранее благодарен за совет и помощь!!!
15.06.2015 15:54:50
Добрый вечер.
Спасибо за данный макрос))) все просто шикарно))
Но вот читаю все комментарии и не могу понять как внести изменение в макрос чтобы при удалении из ячейки А удалялась дата в ячейки B ?
Ответы какие то поверхностные (((
заранее спасибо  
21.07.2015 14:50:41
Добрый день форумчане!

Помогите сделать функциональность таблицы входящих звонков (структура уже готова): нужно, чтобы текущая дата в столбце дата подгружалась автоматически, при внесении изменений правую колонку, чтобы не размещать слева столбец № п/п. Также для меня актуально защита информации от изменений, например, секретарь внесла запись, но где-то ошиблась или случайно нажала на строчку ниже, дата сразу же меняется на текущую, а это не допустимо. Поэтому вопрос 2: что можно сделать, чтобы ранее введенные данные нельзя было изменить после, например, случайного нажатия по активирующей ячейке меняющей дату на текущую? (возможно нужно определить специальный доступ к самому документу???)
3. Как можно внести изменения в файл, который будет иметь защиту из пункта 2?

Заранее спасибо!!!:)
08.08.2015 18:02:29
Может кому понадобится:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("B:O")) Is Nothing Then
      If Len(Target) Then
         Application.EnableEvents = False
         With Cells(Target.Row, 1)
            If .Value = "" Then
                 .Value = Now
                 .EntireColumn.AutoFit
             End If
         End With
      End If
    End If
    Application.EnableEvents = True
End Sub


Это пример кода, где дата и время вставляются в столбец A, а следим за областью B:O. Так же в этом коде дата после ввода не изменяется и макрос не реагирует на нажатие DEL.
19.08.2015 15:01:12
Александр, спасибо!

А подскажите, как сделать, чтобы нажатие на DEL как раз реагировало и удаляло дату в Вашем примере?
Спасибо!
Это то, что мне нужно, только при использовании макроса при удалении строки выдает ошибку run-tipe error 13. Как эту ошибку исключить?
14.12.2016 12:45:26
Надежад Литвиненко,
У меня как и в Вашем случае при удалении строки или при выделении и удалении сразу нескольких значений в диапазоне "B:O" появлялась эта ошибка.
Я практически не разбираюсь в VBA, но мне пришла мысль позаимствовать в другом коде две строки поставить их в начале и конце кода:
On Error GoTo A
A: Exit Sub
После этого проблема с ошибкой run-tipe error 13 исчезла, уже некоторое время пользуюсь и проблем не обнаружил. Не знаю насколько верно это решение поскольку я действовал на удачу, может быть кто-то знающий поправит или оптимизирует. В любом случае Спасибо этому форуму и форумчанам, вы все очень помогли!
Код ниже:
Private Sub Worksheet_Change(ByVal Target As Range)
 On Error GoTo A
    If Not Intersect(Target, Range("B:O")) Is Nothing Then
      If Len(Target) Then
         Application.EnableEvents = False
         With Cells(Target.Row, 13)
            If .Value = "" Then
                 .Value = Date 'положение Now выводит дату с временем, положение Date выводит только дату
             End If
         End With
      End If
    End If
    Application.EnableEvents = True
A: Exit Sub
End Sub
09.08.2015 23:59:41
Здравствуйте Николай.
Private Sub Worksheet_Change(ByVal Target As Range)
     
    For Each cell In Target   '
       If Not Intersect(cell, Range("J2:J100")) Is Nothing Then  '
            With cell.Offset(0, 1)         '
               .Value = Now
               .EntireColumn.AutoFit  '
            End With
       End If
    Next cell
    For Each cell In Target   '
       If Not Intersect(cell, Range("J2:J100")) Is Nothing And cell Like "утверждено*" Then  '
            With cell.Offset(0, -8)         '
               .Value = Now
               .EntireColumn.AutoFit  '
            End With
       End If
    Next cell
End Sub
 
Из комментариев собрал вот такой код. На сколько правильно не знаю, но работает не у всех.
And cell Like "утверждено*"
С файлом работают на MacOS и не у всех в коде правильно воспринимается русский язык. Отображается "_____".
Как можно заменить "утверждено*" на условие - "сканируемый диапазон (J2:J100)  равен "data!$D$8"? И можно ли?
Спасибо.
14.08.2015 22:46:33
Решил проблему совместимости.
В заданной ячейке с текстом "утверждено" дописал точку "утверждено."
В скрипте только точка с звездочкой:
And cell Like "*.*"
Работает, спасибо.
14.10.2015 10:03:56
Спасибо большое, Николай Павлов за сайт!
Скажите пожалуйста, как сделать чтобы после изменения ячейки и, соответственно, срабатывания макроса можно было отменить изменение ячейки и макрос(или не макрос) бы обратно вернул дату изменения? Это реально?
Кнопка отменить неактивна становится после применения макроса, и уже ничего не вернуть(  
05.11.2015 00:08:56
помогите пожалуйста и мне. В екселе слабоват а с макросами и программированием полный ноль.

пробовал из приведенных тут примеров слепить себе, но не получается.
вот использую такой (соединил из примеров тут):


Private Sub Worksheet_Change(ByVal Target As Range)
       For Each cell In Target
        If Not Intersect(cell, Range("C2:O500") Is Nothing And _
                                      Target.Offset(0, 1) = "" Then
               With With Range("B" & cell.Row)
                   .Value = Date
                   .EntireColumn.AutoFit
               End With
      End If
   Next cell
End Sub

Чего хочу добиться? мне нужно чтобы при вводе данных в диапазоне  C2:O500 в соответствующей ячейке столбца B вставлялась дата (без времени)
И чтобы при удалении данных дата не менялась (не вставлялась еще раз)

как это сделать?

Так же при использовании одного из готовых примеров макроса, кажется самый первый, почему то при вставке даты макросом столбец сильно становился шире (намного шире чем нужно для даты,  в несколько раз) - почему так? и как это сразу пофиксить вместе с решеением поставленной задачи описанной выше.

помогите пожалуйста готовым макросом, заранее спасибо.
05.11.2015 00:34:05
вот почти так как мне нужно


Private Sub Worksheet_Change(ByVal Target As Range)
   For Each cell In Target
      If Not Intersect(cell, Range("C2:O1000") Is Nothing Then
           With Range("B" & cell.Row)
              .Value = Date
              End With
      End If
   Next cell
End Sub

только подправьте этот макрос чтобы при удалении данных с ячейки дата не вставлялась снова, помогите пожалуйста.
05.11.2015 00:39:14
и еще где и как задается для какого листа этот макрос работает?

вроде на других листах он не работает... как указать макросу где ему работать и чтобы он работал на новых созданных листах?
06.11.2015 20:05:07
вот макрос, который решает мои задачи, описанные выше


Private Sub Worksheet_Change(ByVal Target As Range)
For Each cell In Target
If Not Intersect(cell, Range("C2:O1000") Is Nothing And Range("B" & cell.Row) = "" _
And Not cell.HasFormula And Not cell.Value = "" Then Range("B" & cell.Row).Value = Date
Next cell
End Sub

может кому пригодится... а то тема похоже заглохла и перестали тут отвечать на вопросы и давать советы и решения.... пришлось за оплату чтобы подправили...
Подскажите, как надо модифицировать код для работы с умными таблицами, чтобы изменения отслеживались в диапазоне-столбце Таблица1[Количество], а время изменения ячейки в той же строке диапазона Таблица1[Время изменения] ?
11.03.2016 17:54:52
Доброго всем дня и выходных! Все ресурсы излазил, форумы прочитал.... Нужна помощь. Есть простой макрос, который по кнопке вводит время в выделенную ячейку (в моем случае в столбце "М";)и одновременно автоматически вводит дату изменения ячейки столбца "М" в соседний, или указанный столбец в этой же строке (в моем случае в столбец "L";)Задача для меня не подъемная: нужно,что бы дата в столбце "L" менялась один раз за сутки не зависимо от количества изменений в течении дня в ячейке столбца "М" . Однократное введение даты необходимо потому, что изменения записываются в комментарий, и если дата будет в течении дня меняться неоднократно,то в комментарии получится много записей с одной и той же датой...
 Sub Занято()  If Not Intersect(ActiveCell, Range("J14:M350") Is Nothing Then ActiveCell = Format(Now, "hh:mm" & "-занято" 
 ActiveCell.EntireRow.Cells(12) = Date ' дата в столбец 12 той же строки
End Sub 
14.04.2016 21:27:20
Всем доброго время суток! делаю маленькую программку в которой будет производится отметка (время) о прибытии на работу сотрудников. Табличка простая: Ф.И.О., время прибытия, время убытия (на подобие календаря, на каждый день). так вот вопрос:!???? Дошёл я до 16 числа (календаря) всё успешно работает (поставил галочку, время в соседней клеточке появилась). т.е. так называемых формул получилось 29 шт., а вот дальше выкидывает ошибку! (Run_time error 1004. А ниже: Method' Range' of object' Worksheet' failed.), получается что в макросе более 29 формул прописывать нельзя? или как? Подскажите что с этим делать, и как решить? в месяце то 31 день, а у меня до 16.    Заранее спасибо!
28.05.2016 12:01:32
Добрый день, Николай! Спасибо за ваш сайт! Помогите,пожалуйста, сделать тоже самое с гугл таблицами. (*Автоматическая вставка текущей даты в ячейку при вводе данных)
08.06.2016 00:00:35
Спасибо за макрос, очень нужная вещь.
Но вот только одна беда - при попытке загрузки документа екселя на Google.Docs - не воспринимаются макросы.
Подскажите пожалуйста как "Автоматическая вставка текущей даты в ячейку при вводе данных"  сделать через формулу функции, чтобы при загрузке на Google.Docs работало.
29.06.2016 03:56:58
Доброй ночи))))
Очень часто пользуюсь Вашим ресурсом. Много всего полезного и доступно описано. Большое спасибо)
Ранее пользовалась макросом, который Вы описали:

Private Sub Worksheet_Change(ByVal Target As Range)
   
   For Each cell In Target   'проходим по всем измененным ячейкам
If Not Intersect(cell, Range("A2:A100";)) Is Nothing Then  'если изменененная ячейка попадает в диапазон A2:A100
With cell.Offset(0, 1)   'вводим в соседнюю справа ячейку дату
  .Value = Now
  .EntireColumn.AutoFit  'выполняем автоподбор ширины для столбца B, чтобы дата умещалась в ячейке
End With
End If
   Next cell
End Sub

Все отлично работало. Но недавно пришлось таблицу изменить. И теперь возникла необходимость, чтобы дата вставлялась не в другую ячейку, а в текущую.
Учитывая мои скромные познания в Excel, очень прошу помочь. Сломала себе весь мозг :D:D:D
09.07.2016 00:41:48
Подскажите, пожалуйста, какой должен быть макрос чтоб при удалении соседней ячейки данных (при вставке которых в соседнюю вставлялась дата)  - удалялась и поставленная макросом дата?

Благодарю за ответ
14.09.2016 17:21:53
Огромное  Вам спасибо, долго искал решение этой проблемы. Хотелось бы повторно поднять вопрос об удалении даты при удалении текста.
27.10.2016 16:34:28
Доброго всем дня!
Хочу сказать огромное спасибо за сайт, экономит уйму времени и нервов!
Использую это макрос для внесения даты в столбец C при изменении столбцов B (работает).
Но кроме этого, есть необходимость внесения текущей даты в столбец G при условии, что в ячейке столбца I слово "в работе", и в столбец H при условии, что в ячейке столбца I слово "выполнена", но при этом дата в столбце G изменяться не должна. (значения "в работе" и "выполнена" вводятся не вручную, а выбираются из списка (через условное форматирование))
В макросах не сильна, только начинаю разбираться, поэтому очень прошу помощи.
Пыталась сделать как-то так..
Private Sub Worksheet_Change1(ByVal Target As Range)
       For Each cell In Target
        If Not Intersect(cell, Range("I2:I80";)) Is Nothing And cell Like "В работе" Then
                                      With Range("G" & cell.Row)
                   .Value = Now
               End With
      End If
   Next cell
End Sub
28.10.2016 15:09:15
Доброго дня, Николай!
Если не сложно, для тех кто в танке, как данный макрос прописать на определенные листы в книге, например "Worksheet1", "Worksheet5", "Worksheet6" и т.п.?

Private Sub Worksheet_Change(ByVal Target As Range)

Заранее благодарен

 
29.10.2016 10:48:04
Для разных листов макрос будет тот же самый, но вставлять его надо в модуль соответствующего листа. Т.е. щелкаете правой кнопкой мыши по ярлычку нужного листа, выбираете Исходный текст (Source Text) и вставляете макрос в открывшееся окно. В самом макросе ничего менять не нужно - он универсальный.
30.10.2016 12:08:15
Спасибо Вам огромное!
Спасибо. что не оставляете без внимание даже таких танкистов как я;)
Очень Вам благодарен!
17.11.2016 11:08:45
Здравствуйте!
Хороший макрос, взял на вооружение.
Теперь хочу его немного изменить, чтобы автоматически пронумеровывал строку при введении данных.
Нумерация начинается с "1" (Значение=СТРОКА()-СТРОКА($A$1))
Есть мысль указать другой тип параметра Value, но какой?
17.11.2016 14:22:37
Разобрался.
=ЕСЛИ(ЕПУСТО(А2);"";СЧЁТЗ($А$2:А2))
Николай, здравствуйте! Подскажите, пожалуйста, как прописать два условия, чтобы они работали одновременно:
Первое условие, Ваш "классический" макрос даты, второе условие: только при  внесение отметки "да" в столбце, например, g, в след. Столбце h отображалась дата. Спасибо!
Страницы: 1  2  3  4  5  6  
Наверх