Автоматическая вставка текущей даты в ячейку при вводе данных
Предположим, у нас имеется таблица заказов, куда пользователь вводит номер заказа, имя клиента, сумму и т.д. Необходимо сделать так, чтобы при внесении номера заказа в столбец А - в столбце 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 работает с датами
- Что такое макрос, как он работает, куда копировать текст макроса, как запустить макрос?
Например документ был сдан в архив 12 мая 2019 года срок хранения 1 год, хотелось бы чтобы ячейка с датой сообщала мне что срок подошел для изъятия документа, скажем выделялась красными или каким нибудь другим цветом.
Заранее благодарю.
Вот "нативная" формула автодаты для Exel / Libreofice Calc, которая работает без всяких макросов.
=ЕСЛИ(C1="";"";ЕСЛИ(B1="";ЕСЛИ(C1="";"";ТДАТА());B1))
В при заполнении ячейки С1 в ячейку B1 будет выставлена текущая дата / время.
При удалении С1, удалится и B1.
При изменении С1 ячейка B1 не изменяется.
Только необходимо открыть вкладки в LibreOffice: СЕРВИС - ПАРАМЕТРЫ - LibreOffice Calc - ВЫЧИСЛЕНИЯ - ЦИКЛИЧЕСКИЕ ССЫЛКИ и поставить галочку в ИТЕРАЦИИ.
В экселе тоже надо будет найти нечто, что отвечает за циклические ссылки и итерации и включить их, иначе будет выдавать ошибку.
И работают они только в режиме ручного пересчета.
Насчет LibreOffice - не скажу, не работал в нем практически
Давно борюсь с такой проблемой не хотел писать по пустякам но видимо придется.
Прошу помощи в...
Имею две проблемы, и две нерешенные формулы, кто может сталкивался или сможет помочь, а кому надо пожалуйста пользуйтесь 1-м вариантом если Вам не надо вкладывать дату в 2-ве и более ячейки она работает норм. И так...
Способ №1
1) Если ввожу дату вручную в столбик А4 по А15 то в столбце G4 по G15 автоматически и беспроблемно вводиться эта дата, при изменении даты в столбце А2 по А15 вручную то опять автоматически и беспроблемно вводится дата в следующую пустую колонку, если сделать Ctrl+С и выделить колонки А2 по А15 нажать Ctrl+V, то дата будет записана в G4-H4-I4-J4... и так далее вместо G5-G6-G7...
2) После защиты листа эта формула вовсе не работает. помогите кто знает заранее благодарю за труд.
Способ №2
Или может как то объединить Вашу формулу которая будет вписывать дату в ячейке B5-B6-B7 оттуда моя формула будет уже автоматически видеть дату как вписанную в ручную в каждую ячейку и записывать по вертикали в следующею свободную ячейку G5-G6-G7... так я пробовал но не могу запустить сразу две формулы для работы с параллельными ячейками
Кому интересно, прописываем этот код после своего макроса, и вуаля
Что необходимо сделать что бы таки работала автоматическая вставка даты в соседней графе при вводе или изменении ячейки?
И еще момент. Как сделать что бы дата не менялась каждый раз при обновлении страницы.
И может стоит еще что то подправить в имеющемся коде, я просто вообще не понимаю ничего в этом.
Макрос отличный!
Но столкнулся с такой проблемой:
если данные ввожу через форму, то дата не появляется (ячейка остается пустой).
Подскажите пожалуйста, как сделать, чтобы текущая дата и время добавлялись автоматически при вводе данных через форму?
Заранее спасибо!
Совсем профан в VBA (((
Подскажите, а можно скорректировать код таким образом, чтобы дата проставлялась, если значение в ячейке соответствует условию. Например, в ячейке записана формула, при выполнении ряда критериев значение в ней автоматически меняется от "" до 5, можно ли сделать так, чтобы дата проставлялась автоматически если значение в ячейке становится в диапазоне от 1 до 5?
При изменении значения во втором столбце на любое из доступных, в первом столбце обновляется дата на текущую.
Суть кардинального отличия - в использовании переменной вместо буфера и проверка на активный диапазон, что привело к ускорению работы макроса в момент работы со столбцами и строками (удаление, вставка и т.п.) примерно на 90%
п.с. я первый раз это делал, поэтому возможно всё не так как кажется )))
Макрос (вирусный) удаляется неохотно...
по вставке даты например мне надо при нажатии любой кнопки в столбике A в столбик B вставлять текущую дату
при помощи макроса ниже, как сделать так чтобы на этом же листе принажатии столбик А вставка была в В , затем при нажатии скажем D вставка была в E
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, 2) 'вводим в соседнюю справа ячейку дату
.Value = Time
.EntireColumn.AutoFit 'выполняем автоподбор ширины для столбца B, чтобы дата умещалась в ячейке
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("D2:D100")) Is Nothing Then 'если изменененная ячейка попадает в диапазон D2:D100
With cell.Offset(0, 2) 'вводим в соседнюю справа ячейку дату
.Value = Time
.EntireColumn.AutoFit 'выполняем автоподбор ширины для столбца B, чтобы дата умещалась в ячейке
End With
End If
Next cell
End Sub
расположив два макроса подряд выдаёт ошибку
для столбца например А и столбца например D
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
Private Sub Worksheet_Change(ByVal Target As Range)
For Each cell In Target 'проходим по всем измененным ячейкам
If Not Intersect(cell, Range("D2:D100")) Is Nothing Then 'если изменененная ячейка попадает в диапазон D2:D100
With cell.Offset(0, 1) 'вводим в соседнюю справа ячейку дату
.Value = Now
.EntireColumn.AutoFit 'выполняем автоподбор ширины для столбца B, чтобы дата умещалась в ячейке
End With
End If
Next cell
End Sub
For Each cell In Target 'проходим по всем измененным ячейкам
If Not Intersect(cell, Range("A2:A100, D2:D100") Is Nothing Then 'если изменененная ячейка попадает в диапазон A2:A100 и D2:D100
With cell.Offset(0, 1) 'вводим в соседнюю справа ячейку дату
.Value = Now
.EntireColumn.AutoFit 'выполняем автоподбор ширины для столбца B, чтобы дата умещалась в ячейке
End With
End If
Next cell
End Sub
.NumberFormat = "dd-mm-yyyy, hh:mm:ss" / не хочет выдавать нужную инфу
затупил:
.Value = Now
.NumberFormat = "dd-mm-yyyy, hh:mm:ss"
Доброго дня!
Не могу в макросе разобраться. Может не там ищу...
У меня простейший макрос написать не выходит ((
Суть в чем? Необходимо, чтобы при вводе значения в ячейку на одном листе, проставлялась дата создания значения в ячейке, в другом листе. Подставляю вышеуказанные формулы, а они не работают. Да, и к тому же, сложность вызывает то, что ячейки, и на первом и на втором листе объединены. То есть на одном листе 3 ячейки в одну, и на другом листе 5 ячеек в одну. Этот код пытался править. Все попытки четны.
Private Sub Worksheet_Change(ByVal Target As Range)
For Each cell In Target 'проходим по всем измененным ячейкам
If Not Intersect(cell, Range("G4:AK100";)) Is Nothing Then
With Range("AR" & cell.Row)
.Value = Now
.EntireColumn.AutoFit
End With
End If
Next cell
End Sub
Что изменить или дописать в макрос, чтобы при удалении строки и удалялась дата в ячейке?