Автоматическая вставка текущей даты в ячейку при вводе данных
Предположим, у нас имеется таблица заказов, куда пользователь вводит номер заказа, имя клиента, сумму и т.д. Необходимо сделать так, чтобы при внесении номера заказа в столбец А - в столбце B напротив введенного заказа автоматически появлялись дата и время его занесения:
Чтобы реализовать такой ввод даты, нам потребуется простой макрос, который надо добавить в модуль рабочего листа. Для этого щелкните правой кнопкой мыши по ярлычку листа с таблицей и выберите в контекстном меню команду Исходный текст (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. В соседней ячейке тут же появится текущая дата-время!
Ссылки по теме
- Как сделать выпадающий календарь для быстрого ввода любой даты мышью в любую ячейку.
- Как Excel работает с датами
- Что такое макрос, как он работает, куда копировать текст макроса, как запустить макрос?
Спасибо за данный макрос))) все просто шикарно))
Но вот читаю все комментарии и не могу понять как внести изменение в макрос чтобы при удалении из ячейки А удалялась дата в ячейки B ?
Ответы какие то поверхностные (((
заранее спасибо
Помогите сделать функциональность таблицы входящих звонков (структура уже готова): нужно, чтобы текущая дата в столбце дата подгружалась автоматически, при внесении изменений правую колонку, чтобы не размещать слева столбец № п/п. Также для меня актуально защита информации от изменений, например, секретарь внесла запись, но где-то ошиблась или случайно нажала на строчку ниже, дата сразу же меняется на текущую, а это не допустимо. Поэтому вопрос 2: что можно сделать, чтобы ранее введенные данные нельзя было изменить после, например, случайного нажатия по активирующей ячейке меняющей дату на текущую? (возможно нужно определить специальный доступ к самому документу???)
3. Как можно внести изменения в файл, который будет иметь защиту из пункта 2?
Заранее спасибо!!!
Это пример кода, где дата и время вставляются в столбец A, а следим за областью B:O. Так же в этом коде дата после ввода не изменяется и макрос не реагирует на нажатие DEL.
А подскажите, как сделать, чтобы нажатие на DEL как раз реагировало и удаляло дату в Вашем примере?
Спасибо!
У меня как и в Вашем случае при удалении строки или при выделении и удалении сразу нескольких значений в диапазоне "B:O" появлялась эта ошибка.
Я практически не разбираюсь в VBA, но мне пришла мысль позаимствовать в другом коде две строки поставить их в начале и конце кода:
On Error GoTo A
A: Exit Sub
После этого проблема с ошибкой run-tipe error 13 исчезла, уже некоторое время пользуюсь и проблем не обнаружил. Не знаю насколько верно это решение поскольку я действовал на удачу, может быть кто-то знающий поправит или оптимизирует. В любом случае Спасибо этому форуму и форумчанам, вы все очень помогли!
Код ниже:
Как можно заменить "утверждено*" на условие - "сканируемый диапазон (J2:J100) равен "data!$D$8"? И можно ли?
Спасибо.
В заданной ячейке с текстом "утверждено" дописал точку "утверждено."
В скрипте только точка с звездочкой:
Скажите пожалуйста, как сделать чтобы после изменения ячейки и, соответственно, срабатывания макроса можно было отменить изменение ячейки и макрос(или не макрос) бы обратно вернул дату изменения? Это реально?
Кнопка отменить неактивна становится после применения макроса, и уже ничего не вернуть(
пробовал из приведенных тут примеров слепить себе, но не получается.
вот использую такой (соединил из примеров тут):
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 вставлялась дата (без времени)
И чтобы при удалении данных дата не менялась (не вставлялась еще раз)
как это сделать?
Так же при использовании одного из готовых примеров макроса, кажется самый первый, почему то при вставке даты макросом столбец сильно становился шире (намного шире чем нужно для даты, в несколько раз) - почему так? и как это сразу пофиксить вместе с решеением поставленной задачи описанной выше.
помогите пожалуйста готовым макросом, заранее спасибо.
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
только подправьте этот макрос чтобы при удалении данных с ячейки дата не вставлялась снова, помогите пожалуйста.
вроде на других листах он не работает... как указать макросу где ему работать и чтобы он работал на новых созданных листах?
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
может кому пригодится... а то тема похоже заглохла и перестали тут отвечать на вопросы и давать советы и решения.... пришлось за оплату чтобы подправили...
Но вот только одна беда - при попытке загрузки документа екселя на Google.Docs - не воспринимаются макросы.
Подскажите пожалуйста как "Автоматическая вставка текущей даты в ячейку при вводе данных" сделать через формулу функции, чтобы при загрузке на Google.Docs работало.
Очень часто пользуюсь Вашим ресурсом. Много всего полезного и доступно описано. Большое спасибо)
Ранее пользовалась макросом, который Вы описали:
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, очень прошу помочь. Сломала себе весь мозг
Благодарю за ответ
Хочу сказать огромное спасибо за сайт, экономит уйму времени и нервов!
Использую это макрос для внесения даты в столбец 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
Если не сложно, для тех кто в танке, как данный макрос прописать на определенные листы в книге, например "Worksheet1", "Worksheet5", "Worksheet6" и т.п.?
Private Sub Worksheet_Change(ByVal Target As Range)
Заранее благодарен
Спасибо. что не оставляете без внимание даже таких танкистов как я;)
Очень Вам благодарен!
Хороший макрос, взял на вооружение.
Теперь хочу его немного изменить, чтобы автоматически пронумеровывал строку при введении данных.
Нумерация начинается с "1" (Значение=СТРОКА()-СТРОКА($A$1))
Есть мысль указать другой тип параметра Value, но какой?
=ЕСЛИ(ЕПУСТО(А2);"";СЧЁТЗ($А$2:А2))
Первое условие, Ваш "классический" макрос даты, второе условие: только при внесение отметки "да" в столбце, например, g, в след. Столбце h отображалась дата. Спасибо!
Прочел все комментарии и понял, что данную идею реализовать в google docs нереально.
Или вcежеее есть секретный способ, м?
Поделитесь мыслями.
подскажите если нужно чтобы даты вводились при изменении по нескольким столбцам, как изменить макрос. к примеру есть два столбца и они заполняются в разные дни, как проставить возле каждого даты?