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

Предположим, у нас имеется таблица заказов, куда пользователь вводит номер заказа, имя клиента, сумму и т.д. Необходимо сделать так, чтобы при внесении номера заказа в столбец А - в столбце 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  
DX
18.09.2013 23:43:44
Доброго времени суток, классный сайт! У меня вопрос, дата в моем случае находится в столбце "А" а номер заказа в столбце "В" Как им  образам  поменять местами? Заранее огромное спасибо!  
21.09.2013 15:39:58
Укажите в коде макроса B2:B100 вместо А2:А100 и в методе Offset -1 вместо 1.
29.09.2013 13:14:05
Приветствую. Рад что есть такой сайт. И базовый макрос очень пригодился. Но подскажите, если мне необходимо в 2-х или 3-х столбцах на одном листе фиксировать время? Как я должен поступить? Пробовал Вставлять, макрос с другими координатами массива, следом за первым выдает ошибку. Если я ставлю данные в столбец А время отображается в столбце В, а если еще ввожу данные в столбец Е, то время должно фиксироваться в столбце F. Буду благодарен за подсказку.  
08.10.2013 11:21:32
Юрий, этот вопрос уже задавали - почитайте комменты. Вам нужно подправить чувствительный диапазон в макросе:
If Not Intersect(cell, Range("A2:A100") Is Nothing Then  
на
If Not Intersect(cell, Range("A2:A100;E2:E100") Is Nothing Then  
28.11.2015 17:41:37
Доброго времени суток! огромное спасибо за Вашу помощь,
  но данный вариант не работает, вместо " ; " нужно ","
  также проблемка с снятием, постановкой на защиту, не работает в том варианте который дан выше.
  сам исходник использую, спасибо большое
  также хорошая подсказка с вводом имени
в макросах я полный ноль, но с такими шаблонами и подсказками, грех не воспользоваться :)
03.10.2013 19:29:26
а не проще к диапазону ячеек A1:А5  применить форматирование как таблицу, и прописать формулу в ячейку B2   =ЕСЛИ( A2<>0; СЕГОДНЯ(); "" ),  протянуть за крестик формулу и применить к этим ячейкам формат-дата,  тогда при вставке значения в А6 автоматически будет вставляться текущая дата? :)
08.10.2013 18:56:28
Ну, это тоже один из вариантов, весьма неплохой. Везде есть свои плюсы и минусы.
14.10.2013 08:41:52
Если интересно, то сегодня я сегодня случайно обнаружил, что CTRL + : (русская Ж) вставляет текущую дату в ячейку
14.10.2013 09:54:42
Не всегда. Если в системе по умолчанию стоит русский язык, то работать не будет, а нужно нажать Ctrl+Shift+4.
20.10.2017 10:23:33
А как все так же сделать, только через кнопку - "галочку", нажимаешь на нее и в нужную ячейку заполняется нынешняя дата?
17.09.2022 11:37:09
Не работает. При вставке значения в А6 весь столбец В меняет значение на текущую дату
08.10.2013 14:47:25
крутой код!)
17.10.2013 05:26:28
Доброго времени суток, Николай! Большое спасибо за сайт!
Что и куда надо вставить, так что бы:
1) Когда "растягиваешь" то есть увеличиваешь число строк в  "таблице", Дата НЕ Заполнялась автоматически в новые и старый ячейки-строки? ( то есть тяну, а он сразу вставляет дату+ еще и старые заменяет.
и 2) что бы дата НЕ вставлялась когда:
а) случайно активировал ячейку
и как сдлать так что бы: 3) Удалил значение удалилась дата



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

Комментарий СердЖиГ 06.10.2012 16:54:49 МНЕ НЕ ПОМОГ
17.10.2013 07:51:00
1. Не использовать Таблицу
2. "Случайно" - это как? И чем будет отличаться от "не случайно"?
3. Написать еще один макрос аналогичного вида
17.10.2013 10:41:41
1) ну это как то не профисеонально)))) как анализ то делать, за месяц или неделю без таблицы, там же фильтры?)))))
2 и 3 не имеют смысла)))
18.10.2013 02:07:09
здравствуте, обалденный макрос разобрался настроил под себя,
но ни как не могу задать формат даты, надо чтоб указывал только день и месяц!

помогите

спасибо  
25.10.2013 07:49:48
Формат ячейки - Число - Дата - и выбрать подходящий формат не помогает?
26.10.2013 20:22:42
Спасибо Николай, так в том то и дело что при выполнение макроса размер ячейки менялся, но разобралься сам удалил и макроса   .EntireColumn.AutoFit , и тогда размер остаёться заданным.

Спасибо Александр
14.12.2013 11:54:27
Здравствуйте!
Подскажите кто нибудь :)
Можно ли как то усовершенствовать макрос, чтобы вместе с датой он вставлял в ещё одну соседнюю ячейку порядковые номера?
14.12.2013 12:37:54
Т.е. я вношу изменения в А1, в В1 вставляется дата (реализовано), а в С1 номер 1.
    вношу изменения в А2, в В2 вставляется дата, в С2 номер 2 и т.д.
26.12.2013 09:05:48
Столкнулся с проблемой, что ячейка, куда вноситься автоматическая дата, уж очень широка. Она становиться шире самой даты раза в 3.
Постоянно сужаю в ручную, но  при каждой работе макроса он опять расширяет.
Так понимаю, что надо мне что-то с автоподбором ширины сделать. Он почему-то определяет ее намного шире, чем надо))

P.S
В общем вставил закрепленный размер ширины ячейки, под свои запросы

   
Вместо
EntireColumn.AutoFit
Вставил

Columns("C:C").ColumnWidth = 14# 

Где "С:С" это необходимая мне колонка, а "14"  - размер
26.12.2013 16:13:59
Можно просто удалить строчку
.EntireColumn.AutoFit  
10.01.2014 20:15:45
кто подскажет как сделать чтоб время появлялось не в столбце а свеху в первых ячейках D,E,F,G,H и.т.д. или если можно так сказать в певой стоке?
11.01.2014 09:17:34
Ихтиёр, 4 строку поменяйте на:
With ActiveSheet.Cells(1,cell.Column)
и дата будет вводиться в первую ячейку того же столбца, где находится измененная ячейка.
17.01.2014 12:42:51
Очень рад что попал на Ваш сайт. То что надо. Вам мега респект за умение...

Моя проблема чуток другая. использую excel для учета платежей. расширять таблицу для ввода даты платежей считаю излишней. поэтому вот такой тюненг нужен для вашего макроса:

1. Писать дату не в отдельную ячейку, а в примечание к изменяемой ячейке.
2. Нужна какая то защита от случайного изменения значений платежей. Ну , предположим, перед внесением нового платежа нужно стареть прошлую дату, а иначе восстанавливается предыдущий платеж да еще и в красном цвете.   Что то такое. Окошко с предупреждением вообще бы супер было.  
3. При вставке в строки 5,6,7                  макроса из поста выше (СердЖиГ 06.10.2012 16:54:49)    у меня выводится синтаксическая ошибка.

Заранее благодарен. Ввиду полного не знания языка макросов прошу выложить полный макрос))
30.01.2014 00:19:45
С такими задачами вам надо на Форум в ветку Работа. Тут на полдня возиться.
29.01.2014 23:46:53
Добрый день.
Помогите мне, пожалуйста. МНЕ НУЖНО СЛЕДУЮЩЕЕ
1 когда вводим ном. заказа рядом отобразилось время
2 когда вводим сумму рядом тоже отобразилось время
Заранее благодарен
30.01.2014 00:17:19
Денис, а поправить в макросе чувствительный диапазон на свой пробовали?
Т.е. изменить "A2:A100" на "A2:A100,D2:D100"
30.01.2014 11:58:11
Спасибо, Николай все работает! Но есть еще момент, как сделать что бы при вводе суммы вся строчка выделялась например серым цветом
07.02.2014 15:33:19
Добрый день! Очень полезный макрос, но у меня есть одна непростая задача, возможно, только для меня, т.к. я еще учусь. Суть такова: если за основу брать Вашу табличку, то дату в графу В вводим вручную, но... Если она меньше какой-либо заданной, например, 01.01.2013, то автоматически должна проставляться дата 01.01.2013. Я могу сделать это и условным форматированием с появлением сообщения об ошибке, но тогад надо будет дату 01.01.2013 вносить вручную. Буду очень признательна за помощь!
23.03.2014 18:38:24
Светлана, на такое тут не ответить. Нужен ваш файл с примером, как минимум. Лучше создайте тему на Форуме.
 А вот такой вопрос:
если нужно, чтобы при заполнении определённой ячейки проставлялась дата в двух разных ячейках одновременно (напр, F9 и G11)?
23.03.2014 18:32:04
Продублируйте в коде блок with - end with и все :)
22.03.2014 13:47:01
Здравствуйте, Николай.
Огромное спасибо за макрос,  долго искал нечто подобное. Подскажите пожалуйста, что нужно изменить в макросе, чтобы дата и время изменения выводились в одну конкретную ячейку, например в M.  Прочитал ветку, ответ на свой вопрос не нашел. Спасибо.

Private Sub Worksheet_Change(ByVal Target As Range)   
    For Each cell in Target   'проходим по всем измененным ячейкам
    If Not Intersect(cell, Range("A2:N1000")) Is Nothing Then  
      With Range("O" & cell.row)
         .Value = Now
         .EntireColumn.AutoFit  
      End With
    End If
    Next cell
End Sub
23.03.2014 18:27:55
У вас правильный макрос, но формат для ячейки должен стоять с отображением времени, иначе будет видно только дату.
24.03.2014 19:01:14
Я не о формате ячейки.  Необходимо только в одну конкретную ячейку (например в М1)  выводить дату и время изменения любой ячейки из диапазона ячеек, например с А1 по N1000.  Своего рода контроль внесения изменений в лист книги. Спасибо.
19.04.2014 09:18:42
Просто замените
With Range("O" & cell.row)
на
With Range("M1")
19.04.2014 17:48:49
Отлично, то что надо. Спасибо.
30.03.2014 02:56:26
Вопрос который уже пару раз поднимался в этом топике, но до решения не доведен. Николай, беру макрос который Вы предложили для того чтобы он не менял дату если в ячейке уже есть другая дата.

Private Sub Worksheet_Change(ByVal Target As Range)
        For Each cell in Target
         If Not Intersect(cell, Range("A2:A100")) Is Nothing And _
                                       Target.Offset(0,1)="" Then
                With Target.Offset(0, 1)
                    .Value = Now
                    .EntireColumn.AutoFit
                End With
       End If
    Next cell
End Sub
 

При вставке этого кода .Value = Now сразу подсвечивается красным. Несмотря на это всё равно закрываю окно с кодом, выходит предупреждающее сообщение о баге. Ввожу в столбец А значение и выбрасывает обратно на код, где уже желтым выделено
Private Sub Worksheet_Change(ByVal Target As Range)
Николай помогите :)
Если для помощи нужно предоставить дополнительный код ошибки или что то в этом роде, скажите от куда его выдернуть :)
05.07.2015 09:35:06
Скопируйте это будет работать нормально))

Private Sub Worksheet_Change(ByVal Target As Range)
       For Each cell In Target
        If Not Intersect(cell, Range("A2:A100")) Is Nothing And _
                                      Target.Offset(0, 1) = "" Then
               With Target.Offset(0, 1)
                   .Value = Now
                   .EntireColumn.AutoFit
               End With
      End If
   Next cell
End Sub
08.05.2014 15:43:26
а как сделать так, что бы дата изменения вставлялась не в какую то ячейку а в примечании к ячейке ?
заранее благодарен
08.05.2014 16:54:33
Как-то так:
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)         'вводим в соседнюю справа ячейку дату в комментарий
               .AddComment
               .Comment.Text Text:=Date
            End With
       End If
    Next cell
End Sub
08.05.2014 21:37:34
а если не в соседнюю ячейку а в саму ту ячейку  примечание то With cell.Offset(0, 1) изменить на With cell.Offset(0, 0) ?
14.05.2014 10:03:22
Тогда будет так:
            With cell
                Application.EnableEvents=False
               .AddComment
               .Comment.Text Text:=Date
               Application.EnableEvents=True
            End With
19.05.2014 21:49:34
Run-Time error '1004':
application-defined or object-defined error
13.05.2014 13:41:52
Добрый день! Очень замечательный макрос!
Подскажите как прописать диапазон с большим количеством столбцов.
В экселе создан чек-лист с проставлением отметок о выполнении определенной последовательности действий, одно действие включает в себя два столбца, в одном ставится отметка в другом благодаря макросу ставится дата, таких пар столбцов уже 40 шт., максимально удалось указать диапазон для 27 пар столбцов, дальше появляется ошибка: runtime error 1004 method range of object worksheet failed
14.05.2014 10:00:53
Не видя вашего файла - ответить нереально.
14.05.2014 12:30:03
Вот файл с шаблоном документа:
чек-лист
14.05.2014 14:44:22
У функции Range есть ограничение на количество и длину аргументов. В вашем случае можно поступить проще и проверять четность номера столбца в диапазоне:
Private Sub Worksheet_Change(ByVal Target As Range)
     
    For Each cell In Target   'проходим по всем измененным ячейкам
       If Not Intersect(cell, Range("H7:CH1000")) Is Nothing Then
            If Target.Column Mod 2 = 0 Then  'если вводят в четный столбец, то добавляем дату слева
                With cell.Offset(0, -1)
                   .Value = Now
                   .EntireColumn.AutoFit
                End With
            End If
       End If
    Next cell
End Sub
15.05.2014 08:23:41
Это именно то что нужно!
Большое Спасибо!
18.06.2014 03:38:10
Доброй ночи, Николай.
вот макрос:

Private Sub Worksheet_Change(ByVal Target As Range)
    For Each cell In Target 
       If Not Intersect(cell, Range("F4:AO1000")) Is Nothing Then
            With Range("D" & cell.Row)
               .Value = Now
               .EntireColumn.AutoFit
            End With
       End If
    Next cell
End Sub
 
Необходимо чтоб в диапазоне F4:AO120 при случайном удалении из клетки дата (клетка D) не изменялась.
Заранее благодарен
04.07.2014 09:51:13
Что значит "случайном удалении"? А как отличить случайное от неслучайного?
04.07.2014 12:37:27
Имеется в виду: дата ставится один раз, после изменения в строчке (заданного диапазона) или нажатия на delete дата оставалась, не менялась. Спасибо за ответ.
24.06.2014 15:46:58
Николай, скажите, а как сделать так, чтобы одновременно с вводом даты я в ячейку cell.Offset(0, 1)
в ячейку cell.Offset(0, 2) вводился "текст"?
29.06.2014 09:01:06
Здравствуйте Николай.
Скачал Ваш пример, даже редактор не открывал. Изменяю значения в диапазоне А2:А7 Вашего примера, ничего не происходит..
У меня Win7 64, MSO 2013 64. Машина тоже не слабая. Хотелось бы понять почему, спасибо!
04.07.2014 09:49:35
Защиту от макросов отключили?
04.07.2014 10:05:38
Макросы запускались автоматически, во всяком случае сообщений MSO не выдавал никаких. Работает на другой машине исправно, попробую сам разобраться в чём дело.
04.07.2014 10:17:40
Возможно дело в том, что офис у вас 64-бит. Многие макросы не работают на такой платформе.
03.07.2014 20:50:54
Здравствуйте товарищи !
Нужна помощь!
Спасибо за столь полезную информацию! Но у меня есть вопрос над которым я бьюсь уже больше недели и немогу разрешить. Буду счастлив если кто то сможет мне помочь и разрешить проблему... Попытаюсь описать детально.

Я воспользовался изложеными в форуме макросом и у меня внутри страницы он имеет следующий вид:
 Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
    If Target.Offset(0, 1).Value = "" Then
    Target.Offset(0, 1) = Date
    Target.Offset(, 2) = Format(Now, "hh:nn";)
    End If
End If
End Sub

Макрос работает прекрасно, помещает дату в колонку "B" и время в колонку "C" при изменении ячеек в колонке "A," но с одним условием: если я изменяю колонку "А" вручную. А если я использую сторонюю программу вносящую изменения в колонку  "A", то колонка "B" и "C" остаются без изменения и макрос не срабатывает...  (использую программу сканирования штрих кодов Twedge).

Тот же самый эффект вы можете повторить без установки данной программы, достаточно приравнять ячейку в колонке "A" к любой ячейке в колонке "D". После внесения изменений в ячейку колонки "D" изменния автоматически отобразятся в ячейке "A", но при этом указанный выше макрос не сработает и не отобразит время и дату в отведенных для этого ячейках.

Буду искренне благодарен всем кто сможет мне помочь!!
04.07.2014 09:56:35
Это сложнее.
Я бы вешал макрос на событие пересчета листа Worksheet.Calculate, который проверял бы заданный диапазон на предмет не появились ли в нем новые данные и при их появлении дописывал бы рядом дату-время.
Это в общих чертах. Точнее без конкретной задачи и файла не сказать.
07.07.2014 13:01:40
Спасибо Николай !
Вы дали правильное направление... У меня получилось изменить макрос и привязать его для одной ячейки и даже если программа вставляет данные то все работает и появляется.
Вот только я новичок в этом деле и не могли бы вы мне подсказать как задать проверку не для одной ячейки а для всего столбца.... Вот мой макрос:

Private Sub Worksheet_Calculate()
Dim target As Range
Set target = Range("A3")
If target.Offset(0, 1).Value = "" Then
target.Offset(0, 1) = Date
target.Offset(, 2) = Format(Now, "hh:nn")
End If
End Sub

если я ставлю range(''A3:A100'') то у меня вечно появляется ошибка...  я думаю, что возможно у меня проблемма с заданием типов переменых. Заранее спасибо буду очень блогадарен за помощь.
08.07.2014 13:22:35
Добрый день! Подскажите, пожалуйста, как поступить,
1.если мне нужно, чтобы дата и время проставлялись в нескольких диапазонах дат. Скажем, изменение в столбце А дает дату в столбце В, изменение в столбце С дает дату в столбце Е.
2.Пытаюсь скрыть столбцы с датами, чтобы их не было видно, но как только вношу новое значение, отображается столбец с датами. Как этого избежать?
Страницы: 1  2  3  4  5  6  
Наверх