Доброго времени суток!
Помогите с решением следующей задачи:
В таблице есть несколько столбцов (около10), расположенных в разных местах таблицы (не по порядку) В них ежедневно собираются данные по выработке работников. Нужно фиксировать дату и время внесения данных в любую из ячеек этих столбцов.
Пример таблицы ( столбцы со значениями: В, D, F, H, J, L, N, P, R, T; Cтолбцы с датами :A, C, E, G, I, K, M, O, Q, S, U; Начиная с 4ой строки и вниз на 10 тыс строк)
Важно, чтобы при удалении значения из ячейке, соответствующая дата так же удалялась, а при изменении, обновлялась до актуального на данный момент значения. Это необходимо для того, чтобы в случае ошибки иметь возможность откорректировать значения. Возможно есть еще какое-то решение
Решения, которые расписаны в сети либо не работают либо не под мой случай. Про макросы только начал читать информацию, поэтому надеюсь на понятный ответ.
Заранее спасибо!
Автоматическая вставка текущей даты в ячейку при вводе данных
Предположим, у нас имеется таблица заказов, куда пользователь вводит номер заказа, имя клиента, сумму и т.д. Необходимо сделать так, чтобы при внесении номера заказа в столбец А — в столбце 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 работает с датами
- Что такое макрос, как он работает, куда копировать текст макроса, как запустить макрос?
Фиксация времени изменения в ячейке |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
Как автоматически записывать дату и время при изменении ячейки?
Нам легко вставить статическую дату и время вручную или вставить динамическую дату, меняющуюся вместе с системным временем, с помощью формулы. Если вы хотите автоматически записывать дату и время при изменении или вводе значений, эта проблема может быть несколько иной. Но в этой статье вы можете решить эту задачу, выполнив следующие шаги.
Автоматическая запись даты и времени при изменении ячейки с помощью кода VBA
Автоматическая запись даты и времени при изменении ячейки с помощью кода VBA
Например, у меня есть диапазон значений, и теперь, когда я изменяю или ввожу новые значения в столбец B, я хочу, чтобы в столбце C автоматически записывались текущая дата и время, как показано на следующем снимке экрана:
Вы можете завершить эту задачу с помощью следующего кода VBA. Пожалуйста, сделайте так:
1. Удерживайте ALT + F11 , чтобы открыть Окно Microsoft Visual Basic для приложений.
2. Затем выберите использованный рабочий лист слева Обозреватель проекта, дважды щелкните его, чтобы открыть Модули, а затем скопируйте и вставьте следующий код VBA в пустой модуль:
Код VBA: автоматически записывать дату и время при изменении ячейки
Private Sub Worksheet_Change(ByVal Target As Range)
'Update 20140722
Dim WorkRng As Range
Dim Rng As Range
Dim xOffsetColumn As Integer
Set WorkRng = Intersect(Application.ActiveSheet.Range("B:B"), Target)
xOffsetColumn = 1
If Not WorkRng Is Nothing Then
Application.EnableEvents = False
For Each Rng In WorkRng
If Not VBA.IsEmpty(Rng.Value) Then
Rng.Offset(0, xOffsetColumn).Value = Now
Rng.Offset(0, xOffsetColumn).NumberFormat = "dd-mm-yyyy, hh:mm:ss"
Else
Rng.Offset(0, xOffsetColumn).ClearContents
End If
Next
Application.EnableEvents = True
End If
End Sub
3. Затем сохраните и закройте этот код, чтобы вернуться на рабочий лист, теперь, когда вы изменяете значение ячейки или вводите новые данные в столбец B, дата и время будут автоматически записываться в столбец C.
Ноты:
1. В приведенном выше коде вы можете изменить «B: B”В любой другой столбец, значения ячеек которого вы хотите изменить в этом скрипте: Установите WorkRng = Intersect (Application.ActiveSheet.Range («B: B»), Target).
2. С этим xOffsetColumn = 1 скрипт, вы можете вставить и обновить дату и время в первом столбце рядом с вашим столбцом изменяющегося значения, вы можете изменить число 1 на другие числа, такие как 2,3,4,5… это означает, что дата будет вставлена второй, третий, четвертый или пятый столбцы помимо столбца измененных значений.
3. Когда вы удаляете значение в измененном столбце, дата и время также удаляются.
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Комментарии (108)
Оценок пока нет. Оцените первым!
Здравствуйте!
Описание проблемы: каждый час с прибора снимаются показания и заносятся в таблицу excel.
Нужно проверить, что данные действительно были внесены в это время, а не заполнены в конце рабочего дня по памяти. Т.е. при изменении ячейки в соседней ячейке должны записываться текущая дата и время с помощью функции ТДАТА.
Во вложении: просто формат таблицы для ввода данных.
Заранее спасибо!
добавляет текущюю дату и время в ячейку столбца В при вводе информации в ячейку столбца А
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range(«A2:A1000»)) Is Nothing Then
With Target(1, 2)
.Value = Now
.EntireColumn.AutoFit
End With
End If
End Sub
sklu, спасибо большое, это то, что нужно.
Мож кому пригодится, я так сделал:
Private Sub Worksheet_Change(ByVal Target As Range)
ST = Target.Row ‘ № строки
KL = Target.Column ‘ № колонки
If KL = 1 And ST > 4 And ST < 26 Then
Cells(ST, 2) = Date + Time
End If
End Sub
(ограничено строками с 5 по 25)
Может и я на что сгожусь … Если сгодился, можете меня по+благодарить+.
О различных функциях и функциях уже упоминалось несколько раз. полезно из электронная таблица Microsoft Excel. Что можно найти даже в линия и даже при том, что вы один из миллионов пользователей во всем мире, которые его используют, вы не знали, что изменение ячейки может быть сохранено.
Именно по этой причине мы решили представить статью, которая объяснит шаг за шагом как сохранить дату и время изменения данных или записей ячеек в Excel.
Вы можете не знать, что базы данных Excel являются часто Мизес à Jour разными пользователями. По этой причине необходимо следить за различными модификациями или модификациями, внесенными в данные в ячейках Excel . Итак, мы можем узнать о последнем обновлении записи.
В следующем уроке мы объясним, как сохранить дату и время. изменение данных или записи ячеек в Excel. Очень просто, как мы делали в статье, в которой объяснялось, как создать индекс в Excel с помощью фигур. Поэтому мы просим вас не прекращать читать это интересное руководство, которое, как всегда, будет очень полезно.
Так что вы можете сохранять дату и время изменения данных или записей ячеек в Excel , мы будем использовать событие Worksheet_Change. С его помощью мы можем запускать код VBA в любое время, когда любая ячейка в нашем листе подвергается модификации. Таким образом, мы можем сохранить изменения, внесенные в нашу базу данных.
Предположим, у нас есть таблица, которая показывает четыре столбца, в которых у нас есть в столбце To name, в столбце B — фамилия, в столбце C — телефон. И у нас будет последнее обновление в столбце D с количеством ячеек X. В этом столбце D я хочу ввести запись измененной даты и времени в одну из ячеек.
Какой бы столбец вы ни изменили, в столбце D автоматически будут отображаться дата и время последнего сохраненного изменения. Чтобы выполнить операцию записи дата и время изменения данных или записей ячеек в Excel . Это нужно для перехода в редактор VBA, создания кода или создать макрос , для этого идем наверх и делаем клип на вкладке «Разработчик», затем в VBA.
Ввод кода VBA для сохранения даты и времени
Теперь с левой стороны мы собираемся позиционировать себя на листе, который содержит нашу таблицу, мы делаем правый клип, и в появившихся опциях мы должны выбрать или создать клип в представлении. код . Теперь с правой стороны нам нужно ввести следующий код:
Дополнительная таблица Private_Change (значение ByVal как диапазон)
It Target.Column <4 Тогда
Ячейки (Target. Row, 4). Значение = Сейчас
Конец да
End Sub
Когда это событие сработало, мы сравним ячейку измененного столбца, используя свойство Target. Столбец.
Если параметры в этом столбце меньше 4, текущее время и дата будут вставлены с помощью функции «Сейчас». Вы должны заметить, что время и дата вставлены в столбец 4 и в ячейку, которая была изменена, и это будет достигнуто с помощью свойства Target.Row.
Следующий шаг, который мы собираемся выполнить, — это проверить, работает ли этот код, для этого мы собираемся минимизировать это окно. Далее мы перейдем к листу, на котором расположена наша таблица, и внесем изменения в любую ячейку и столбец. Когда вы это сделаете, дата и время изменения должны появиться в столбце D и в той же строке, где возникло изменение.
Если, наоборот, вы вводите новое имя в поле, в столбце D той же строки будут отображаться время и дата, когда вы сделали запись. И таким простым способом, используя VBA, мы смогли изучить новую функцию Excel. Где ты можешь сохранить дату и время изменения данных или записей ячеек в Excel.
Вопрос по Excel: Автовставка фиксированной даты
Тема в разделе «Софт», создана пользователем Dirk Pitt, 10.04.09.
-
Каждый день в таблицу Exel вносятся данные — номера. Задача: Чтобы при вводе значения, например, в ячейку B1, в ячейке А1 автоматически устанавливалась дата внесения значения в ячейку В1 и т.д. После того, как дата занесена в ячейку А1, она не должна изменяться, если не меняется соответствующая ячейка В1. Изначально попробовал воспользоваться функцией =СЕГОДЯ(), как =ЕСЛИ(B1>0; СЕГОДНЯ(); » «). Да, дата подставляется (например, 8.04.2009), но если дальше продолжать заполнять поля В на следующий день, или на следующий день сохранить/открыть/обновить страницу, то все даты из ячеек А заменяются на сегодняшнюю (например, 9.04.2009). Как сделать так, чтобы дата подставлялась фиксированная и не менялась? Вариант Ctrl + ; известен, но это ручное заполнение, не то. Автозаполнение датой тоже не подходит, так как ячейки заполняются не последовательно, а вразнобой. Поэтому интересует больше формула.
На сайте office.microsoft.ru также решения не нашел. Там говориться о СЕГОДНЯ() и ТДАТА(), но они динамически меняются с обновлением документа. Что касается фиксированной даты, то Microsoft предлагает использовать комбинацию Ctrl+;. Но вот только это не решение…
Заранее спасибо. -
Sem
Активный участникэлементарно
вставляешь макрос в модуль ЭтаКнига(). При изменении второй колонки будет вставлять ЗНАЧЕНИЕ сегодняшней даты в первую колонку по строке измененияPrivate Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Excel.Range)
If Target.Column = 2 Then
Cells(Target.Row, 1)= CStr(Date)
End IfEnd Sub
-
Sem,
Спасибо. Только надо, чтобы даты проставлялись только на одном листе. Просто в книге 9 листов, а данный макрос распространяет свое действие на все листы в целом. Также задача усложняется еще и тем, что на нужном листе есть несколько колонок, куда должны автоматически подставляться даты B->A; I->H, L->K (например, при заполнении В1 дата ставится в А1; I4-H4; L2-K2)
Еще раз спасибо. -
Sem
Активный участникDirk Pitt, видно что с программированием на ВЫ
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Excel.Range)
If Target.Column = 2 And Sh.CodeName = «Лист1» Then ‘ проверка если значение было изменено во второй колонке и на листе «Лист1», что одно и что другое условие можно менять
Cells(Target.Row, 1) = CStr(Date) ‘ формат Cells(), первый параметр — номер строки в которую будет вписываться занчение
Cells(Target.Row+1, 3) = CStr(Date) ‘ второй параметр — НОМЕР колонки куда будет вписываться значение
Cells(Target.Row+2, 4) = CStr(Date)
Worksheets(«Лист2»).Cells(3, 4) = CStr(Date) ‘ либо фиксировано всегда ставить в третью строку четвертой колонки на лист с именем «Лист2»
End IfEnd Sub
Последнее редактирование: 12.04.09
-
Sem,
[off]Совершенно верноПо роду деятельности не связан с программированием, просто привык по возможности максимально все автоматизировать и упрощать, вот и ищу варианты[/off]
Спасибо за помощь)
- Закрыть Меню
-
Волгоградский форум
- Поиск сообщений
- Последние сообщения
-
Пользователи
- Выдающиеся пользователи
- Зарегистрированные пользователи
- Сейчас на форуме
- Поиск
Хитрости »
1 Май 2011 53763 просмотров
Запись изменений на листе в примечания
Иногда необходимо вести лог изменений в ячейках. Просто чтобы видеть как изменялась информация в ячейке. Например, это может пригодиться при ведении истории заказа, когда статус заказа записывается в одной ячейке. Сначала «В обработке», далее «Вывоз со склада», потом «Доставка» и т.п.
Приведенный ниже код создает примечание в ячейке, если её значение было изменено. В примечание заноситься информация о том, что было занесено в ячейку и когда это было занесено(т.е. дата и время изменения). Если примечание в ячейке уже есть, то в имеющееся примечание допишется информация об изменениях.
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) 'отслеживаем изменения только в диапазоне "E14:E50" - т.е. только статус '(изменить адрес, если надо отслеживать другие ячейки) If Intersect(Target, Me.Range("E14:E50")) Is Nothing Then Exit Sub Dim oComment As Comment On Error Resume Next Set oComment = Target.Comment If oComment Is Nothing Then Target.AddComment Target.Text & " " & Format(Now, "dd.mm.yy HH:MM") Else oComment.Text oComment.Text & Chr(10) & Target.Text & " " & Format(Now, "dd.mm.yy HH:MM") End If End Sub
Код необходимо поместить в модуль листа(щелкнуть правой кнопкой мыши по ярлычку листа —Исходный текст), изменения на котором необходимо отследить. Подробнее о модулях.
Следует учитывать, что код сработает только если данные были изменены вручную и для одной ячейки, а не для нескольких. Если скопировать в вставить несколько ячеек, примечание будет создано только для одной, а текст примечания может отличаться от ожидаемого. Если изменения производятся посредством вычисления формул — код не сработает вообще.
Изменения отслеживаются исключительно для ячеек A17:I30. Чтобы изменить ячейки, в которых необходимо отслеживать изменения, необходимо в строке:
If Intersect(Target, Me.Range(«E14:E50»)) Is Nothing Then Exit Sub
заменить адрес «E14:E50» на адрес нужных ячеек.
Если необходимо, чтобы в примечание заносилось предыдущее значение ячейки и вдобавок необходимо ограничить диапазон отслеживания изменений конкретными ячейками, то можно применить следующий код:
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) Dim v, vv, sf, sa As String 'отслеживаем изменения только в диапазоне "A17:I30"(изменить адрес, если надо отслеживать другие ячейки) If Intersect(Target, Me.Range("A17:I30")) Is Nothing Then Exit Sub 'если изменено более одной ячейки - завершаем выполнение во избежание ошибок If Target.Count > 1 Then Exit Sub 'получаем новое значение v = Target.Value sf = Target.Formula 'запоминаем адрес текущей выделенной ячейки 'т.к. после Undo она изменится и надо будет вернуть sa = Selection.Address 'получаем старое значение With Application .EnableEvents = 0 .Undo vv = Target.Value 'старое значение 'возвращаем последнее записанное значение Target.Formula = sf Me.Range(sa).Select .EnableEvents = 1 End With 'сравниваем новое значение с прежним If CStr(vv) <> CStr(v) Then 'если значения различаются - создаем или дописываем примечание On Error Resume Next Dim oComment As Comment Set oComment = Target.Comment If oComment Is Nothing Then 'примечания еще нет - создаем и записываем информацию об изменениях Set oComment = Target.AddComment(CreateObject("wscript.network").UserName & ":" & Chr(10) & "было: " & vv & "; стало: " & v & "; Дата: " & Format(Now, "dd.mm.yy HH:MM")) Else 'уже есть примечание - дописываем информацию об изменениях oComment.Text oComment.Text & Chr(10) & CreateObject("wscript.network").UserName & ":" & Chr(10) & "было: " & vv & "; стало: " & v & "; Дата: " & Format(Now, "dd.mm.yy HH:MM") End If oComment.Shape.TextFrame.AutoSize = True End If End Sub
Код так же как и предыдущий размещается в модуле листа(правая кнопка мыши по ярлычку листа —Исходный текст), изменения в котором необходимо отслеживать.
Так же в данном коде помимо старого значения в примечание так же записываемся имя пользователя, изменившего значение, новое значение, дата/время изменения. Изменения отслеживаются исключительно для ячеек A17:I30. Чтобы изменить ячейки, в которых необходимо отслеживать изменения, необходимо в строке:
If Intersect(Target, Me.Range(«A17:I30»)) Is Nothing Then Exit Sub
заменить адрес «A17:I30» на адрес нужных ячеек.
Хочу обратить внимание, что при изменении нескольких ячеек сразу код не будет выполняться, т.к. ячеек может быть много и их значения могут просто не уместиться в примечания. Если нужны отслеживания множества ячеек сразу, то имеет смысл ознакомиться со статьей: Ведение журнала сделанных в книге изменений
Скачать пример
История изменений ячеек в примечаниях (72,5 KiB, 3 734 скачиваний)
Так же см.:
Ведение журнала сделанных в книге изменений
Выделение сделанных изменений
Статья помогла? Поделись ссылкой с друзьями!
Видеоуроки
Поиск по меткам
Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика