Автоматическая вставка текущей даты в ячейку при вводе данных
Предположим, у нас имеется таблица заказов, куда пользователь вводит номер заказа, имя клиента, сумму и т.д. Необходимо сделать так, чтобы при внесении номера заказа в столбец А - в столбце 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 работает с датами
- Что такое макрос, как он работает, куда копировать текст макроса, как запустить макрос?
А куда именно в макросе приведенном выше нужно вставить Ваш код, чтобы он работал?
Спасибо.
Не могли бы Вы, для не особо одаренных, подсказать что поменять, чтобы при удалении ячейки из диапазона A2:A100 не выводилась дата в соседней ячейке. Просто время от времени нужно чистить таблицу...
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 пробовал
Данное решение мне помогло.
И плюс дополнительное изменение из комментария Николая Павлова - Сейчас на Дату.
Спасибо!
Заранее благодарен
как отредактировать макрос таким образом, чтобы дата ставилась только в одну конкретную ячейку?
т.е. смысл в чём:
есть табличка, люди туда заносят данные (причём под данными должно подразумеваться в том числе простое изменение цвета самой ячейки а она может просто быть пустая), и при закрытии таблицы либо при её сохранении в определённое место должна вноситься дата последнего изминения данной таблицы..
Замечательный сайт!
скажите а как сделать нумерацию с датой.
например для даты 2020 октябрь 28 заказ 03
при внесении чего либо в ячейку А, чтобы в В присвоился жестко номер:
20102803
следующий заказ в этот день 20102804 и т.д.
и чтобы при изменении ячеек А (по аналогии с вашим примером) - номер уже не менялся.
Его надо удалять и пользоваться <CTRL+4>
И вот работая над данной темой у себя в программе возник вопрос, не подскажите что нужно сделать чтоб работал макрос. В столбце A работает формула в таблице
1) после изменения кода, а именно меняю строку "О" на "С" , и при дальнейшее работе (вводе данных в столбец "А" перед тем как появится дата и время весь лист дребежит как бы с пол секунды - почему то до смену столбца такого не было.
2) как добавить в макрос помимо даты и времени логин заполняющего ячейку , ссмысл в том что файл лежит на серваке, и доступный по локальной сети - и на нем меняет кто что хочет и когда захочет
2. Добавить в код после 8-й строки
Пытаюсь запустить Ваш макрос, но выдает ошибку. А можно как-то связаться с Вами, чтобы выяснить в чем проблема? Если есть возможность, напишите мне в скайп. Спасибо!
При очистке ячейки - вновь по умолчанию текущая дата
Реально помогли с этим макросом!
огромное спасибо и дай вам бог здоровья и шо бы у вас руки не болели!!!
подскажите пожалуйста у меня в этом макросе большой диапазон, и когда изменяешь данные в одной ячейке то комп начинает искать где сделали изменение и куда вставить значение. На это к сожалению уходит много времени.
И так внимание вопрос. Как сделать что бы этот макрос выполнялся только перед сохранением данной книги или перед ее закрытием?
Заранее благодарю!
Забыл написать я ее уже стер и все нормально заработало!
Еще раз спасибо!
Воспользовалась приведенным Вами макросом отлично работает, спасибо!
Но столкнулась со следующей проблемой, у меня файл разделен на 2 части, первая доступна для редактирования одним людям, вторая часть - другим, не знаю, как это правильно называется делала с помощью функции "Allow Users to Edit Ranges", данная функция работает только при защите листа, но при включенной защите не работают макросы... можно ли как-то дополнить макрос, чтобы обойти защиту?
Заранее огромное спасибо!
а после 7-й:
Спасибо за ваш сайт много у вас научился.
Но вот столкнулся с проблемой, ввел ваш макрос в свои таблицы, все было прекрасно, да тех пор пока я не растянул таблицу и тут вся таблица перевелась на сегодняшнюю дату.
Как сделать, что б этого не происходило.
За ранее спасибо.
Вот мой макрос.
Спасибо за макрос.
Меня волнует один вопрос: Как сделать так, чтобы только при вводе слова "Исправлено" в ячейку - А3, диапазона A2:A100 выводилась текущая дата и время в соседнюю ячейку - В3.
Теперь заработало.
А можно еще сделать так чтобы после удаления информации из ячейки в диапазоне А2:А100, появившийся текущая дата в соседней ячейке обратно удалилась.
Я имел в виду, что когда я за край таблицы тяну вниз для увеличения ячеек в таблице.
Макрос конечно уже есть и я пробовал вставлять как вы и говорили. Я про это знаю. Однако все равно пишет ошибку компиляции, подсвечивает "cell", сообщение : "Variable not defined"
Может прежний макрос неверно написан? хотя он работает как надо.
пишет Can`t find project or library... не пойму в чем дело.
Проверила у на том ноутбуке библиотеки.. все такие же как и у меня включены
У меня глупого, по чему-то программа выдает ошибку(закрашивается красным цветом) в строке .Value=Now
Как это исправить, подскажите, пожалуйста?
.Value = Now сразу подсвечивается красным. Несмотря на это всё равно закрываю окно с кодом, выходит предупреждающее сообщение о баге. Ввожу в столбец А значение и выбрасывает обратно на код, где желтым выделено
Private Sub Worksheet_Change(ByVal Target As Range)
Николай помогите
Если для помощи нужно предоставить дополнительный код ошибки или что то в этом роде, скажите от куда его выдернуть
Интересно, что это за символ?
Две функции прописанные не совместимы.
Если удаляем значение дата не удаляется макрос в ошибку.
Вот функция:
Можно ли сделать так, чтобы после удаления информации из ячейки, текущая дата в соседней ячейке обратно удалилась.
И можно ли фиксировать только изменения текстового содержимого ячейки, а не изменение формата ячейки по образцу? А то, если ячейка была заполнена, а я ее просто форматирую по образцу, дата изменений меняется на текущую.
Мой вариант:
Private Sub Worksheet_Change(ByVal Target As Range)
For Each Cell In Target
If Not Intersect(Cell, Range("E2:E65536";)) Is Nothing And Cell Like "?*" Then
With Cell.Offset(0, -4)
.Value = Date
.EntireColumn.AutoFit
End With
End If
Next Cell
End Sub
Заранее благодарен!!!!!!
Я попробовал разные варианты с датой, приведённые здесь, но мне требуется такой эффект:
1) Вставляю ЗНАЧЕНИЕ в ячейку столбца-диапазона, в соседней ячейке отражается дата первого изменения
2) Это ЗНАЧЕНИЕ можно изменить в течение дня
3) В последующие дни изменение ячейки невозможно
4) Админ может обнулить значение, сняв защиту с листа
Как это сделать? Всю голову сломал! HELP ME!
Помогите мне, пожалуйста.
Я составляю файл для учета рабочего времени сотрудников. Знания в экселе скромные.
Чтобы не морочиться с вводом даты и временем, использую короткий макрос:
Но мне его не хватает, т.к по задумке в файле есть несколько столбцов для ввода основных данных в последствии из-за которых, появляются дата и время в нужных столбцах. Еще у меня есть опасения, т.к макрос фиксирует любые изменения в файле, даже если я спустя 5 часов выберу из выпадающего списка фамилию того же человека в той же ячейке - время измениться. Из-за чьих-либо кривых рук статистика может измениться, что приведет к неприятным последствиям.
А так же меня весьма привлекла задумка от (
Как мне все это реализовать?
Случайно натолкнулся на этот великолепный сайт, но ответа на свой вопрос пока не нашел: можно ли сделать так, чтобы дата ставилась автоматически при вводе данных, но только за прошедшие сутки. Я отмечаю накладные на следующий день и ввожу в таблицу для отчета.
Заранее, благодарю.
Так-же интересует вопрос, можно ли сделать чтоб лист переименовывался на эту же дату плюс содержимое одной из ячеек через определенный символ (символ: - или / )
Собственно вопрос по макросу:
что изменить в нём для того, что бы дата с числом вставлялись в "А" только если "В" имеет какое - то значение (не пуста)? И что б дата с числом автоматически удалялись, если содержание ячейки "В" удалить? И пр этом нужно, что б, однажды добавленная дата, при последующем редактировании ячейки "В" уже не менялась.
Сколько ни пытался понять сам, методом тыка, так и не понял. Я знаю, что подобные вопросы были, но самостоятельно у меня не выходит всё это скомпоновать.
Private Sub Worksheet_Change(ByVal Target As Range)
For Each cell In Target
If Not Intersect(cell, Range("B2:B1000";)) Is Nothing Then
With Range("A" & cell.Row)
.Value = Now
.EntireColumn.AutoFit
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("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
If Not Intersect(cell, Range("A2:A100") Is Nothing Then
на
If Not Intersect(cell, Range("A2:A100;E2:E100") Is Nothing Then
но данный вариант не работает, вместо " ; " нужно ","
также проблемка с снятием, постановкой на защиту, не работает в том варианте который дан выше.
сам исходник использую, спасибо большое
также хорошая подсказка с вводом имени
в макросах я полный ноль, но с такими шаблонами и подсказками, грех не воспользоваться