Фиксация даты изменения ячейки в excel

Студворк — интернет-сервис помощи студентам

Доброго времени суток!

Помогите с решением следующей задачи:

В таблице есть несколько столбцов (около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 напротив введенного заказа автоматически появлялись дата и время его занесения:

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. В соседней ячейке тут же появится текущая дата-время!

Ссылки по теме

  • Как сделать выпадающий календарь для быстрого ввода любой даты мышью в любую ячейку.
  • Как Excel работает с датами
  • Что такое макрос, как он работает, куда копировать текст макроса, как запустить макрос?

Фиксация времени изменения в ячейке

light26

Дата: Вторник, 30.08.2011, 18:43 |
Сообщение № 1

Группа: Друзья

Ранг: Старожил

Сообщений: 1341


Репутация:

91

±

Замечаний:
0% ±


2007, 2010, 2013

Всем доброго времени суток.
Подобные темы уже проскальзывали на форуме, но как называются я не помню, а через поиск по ключевым словам не нашел.
Задача:
1. При выборе ячеек столбцов O, P, Q появляется календарь и можно выбрать дату и время. Такой макрос есть в «Готовых решениях», но он только для даты. Время там не выберешь
2. В ячейках столбцов от Х до АВ должно появляться время/дата та, когда были произведены изменения в столбце В. Причем, в зависимости от выбора из выпадающего списка ячеек столбца В, время/дата должны заноситься в соответствующую ячейку соответствующей строки диапазона от Х до АВ. Например. в ячейке В10 из выпадающего списка выбираем «В работе». Происходит это в 14:32 31.09.11. Значит в строке Y10 появляется запись: 14:32 31.09.11. Затем в 11:17 02.11.11 в ячейке В10 ставим «Выполнен». Значит в ячейке Z10 появляется запись: 11:17 02.11.11 и т.д.

К сообщению приложен файл:

5838585.xls
(49.0 Kb)


Я не волшебник. Я только учусь

Сообщение отредактировал light26Вторник, 30.08.2011, 18:47

 

Ответить

RAN

Дата: Вторник, 30.08.2011, 21:32 |
Сообщение № 2

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Соответствие в файле еще то!
В списке 7 позиций, столбцов — 5.
Порядок позиций в списке один, порядок столбцов другой.
А ведь эксперт! biggrin
Для «зарегистрировано» развернул дату и время.
Если есть желание — по образцу! cool


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RANВторник, 30.08.2011, 21:34

 

Ответить

light26

Дата: Вторник, 30.08.2011, 22:07 |
Сообщение № 3

Группа: Друзья

Ранг: Старожил

Сообщений: 1341


Репутация:

91

±

Замечаний:
0% ±


2007, 2010, 2013

Все там правильно. Специфика такого построения таблицы обусловлена требованиями отчетности. А как насчет календаря?
Не, я конечно и за это премного благодарен, но все-же…


Я не волшебник. Я только учусь

Сообщение отредактировал light26Среда, 31.08.2011, 00:00

 

Ответить

light26

Дата: Среда, 31.08.2011, 07:58 |
Сообщение № 4

Группа: Друзья

Ранг: Старожил

Сообщений: 1341


Репутация:

91

±

Замечаний:
0% ±


2007, 2010, 2013

Уррррррааааа!!!!!! Я сам допер где, как и что надо поменять в теле написанного RAN макроса ))))
Благо макрос простенький smile


Я не волшебник. Я только учусь

Сообщение отредактировал light26Среда, 31.08.2011, 12:09

 

Ответить

nosbuka

Дата: Суббота, 24.11.2012, 02:17 |
Сообщение № 5

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
0% ±


Добрый день.
У меня похожая ситуация, правда, как я думаю, немного легче. Но я все равно не могу понять, что я делаю не так.
Пожалуйста, объясните.
Мне необходимо, чтобы при выставлении позиции из списка (ячейка А1:А16) в ячейке (B1:B16) отображалась дата и время выставления самой позиции.
Сделал так, как указывалось в предыдущем примере, но, видимо, чего-то не учел.
Буду очень благодарен за объяснения.

К сообщению приложен файл:

7195776.xlsm
(21.4 Kb)

 

Ответить

KuklP

Дата: Суббота, 24.11.2012, 11:02 |
Сообщение № 6

Группа: Проверенные

Ранг: Старожил

Сообщений: 2369


Репутация:

486

±

Замечаний:
0% ±


2003-2010

Всего-то циферку поменять:
[vba]

Code

If Not Intersect(Target, Columns(1)) Is Nothing Then

[/vba]
а вообще Вам достаточно:
[vba]

Code

Private Sub Worksheet_Change(ByVal Target As Range)
      If Intersect(Target, Columns(1)) Is Nothing Or Target.Count <> 1 Then Exit Sub
      Target.Offset(, 1) = Format(Now, «hh:nn DD.MM.YYYY»)
End Sub

[/vba]
И больше ничего не надо.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728

Сообщение отредактировал KuklPСуббота, 24.11.2012, 11:10

 

Ответить

RAN

Дата: Суббота, 24.11.2012, 11:20 |
Сообщение № 7

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Или так

[vba]

Code

Private Sub Worksheet_Change(ByVal Target As Range)
     If Target.Count <> 1 Then Exit Sub
     If Not Intersect(Target, Columns(1)) Is Nothing Then
         If Len(Target) Then Target(, 2) = Date Else Target(, 2) = «»
     End If
End Sub

[/vba]


Быть или не быть, вот в чем загвоздка!

 

Ответить

nosbuka

Дата: Суббота, 24.11.2012, 16:18 |
Сообщение № 8

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
0% ±


Спасибо Вам большое!)
Все работает, я знал, что истина где-то рядом)

 

Ответить

nosbuka

Дата: Воскресенье, 25.11.2012, 18:57 |
Сообщение № 9

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
0% ±


Вынужден снова просить Вашей помощи.
Теперь мне необходимо защитить от форматирования ячейки, в которых логируется время. Но если я ставлю на них защиту- каждый раз при срабатывании макроса вылезает ошибка- он же по сути ячейку-то меняет. Можно ли дня него сделать некий обход, чтобы он не реагировал на то, что ячейка защищена и все-равно вносил изменения?

 

Ответить

RAN

Дата: Воскресенье, 25.11.2012, 19:04 |
Сообщение № 10

Группа: Друзья

Ранг: Экселист

Сообщений: 5645


Быть или не быть, вот в чем загвоздка!

 

Ответить

nosbuka

Дата: Воскресенье, 25.11.2012, 19:40 |
Сообщение № 11

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
0% ±


Спасибо, я видел этот пост.
Видимо, я не туда вписываю код..
Ставлю защиту листа, пароль 1111, меняю значение ячейки — макрос ломается.

 

Ответить

nosbuka

Дата: Воскресенье, 25.11.2012, 20:13 |
Сообщение № 12

Группа: Пользователи

Ранг: Прохожий

Сообщений: 5


Репутация:

0

±

Замечаний:
0% ±


Разобрался. Огромное Вам спасибо!

 

Ответить

RAN

Дата: Воскресенье, 25.11.2012, 20:16 |
Сообщение № 13

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

1. Для того, чтобы код Sub Protect_for_User_Non_for_VBA() сработал, его надо запустить. Это можно делать и вручную, но лучше поместить код в модуль «ЭтаКнига» на событие Private Sub Workbook_Open().
2. Поскольку этот код не выполнен, в макросе возникает ошибка, и макрос останавливается. Но к тому времени уже выполнена команда Application.EnableEvents = False, отключающая обработку событий в приложении. Для того, чтобы обработка событий заработала, нужно выполнить код Application.EnableEvents = True.
3. Макрос для light26 выполнял несколько другие функции. В вашем случае нет необходимости отслеживать, что написано в ячейке, т.е. массив и проверка того, что записано в той или иной ячейке не требуется. Возьмите любой из предложенных вам вариантов, и не усложняйте себе жизнь


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RANВоскресенье, 25.11.2012, 20:17

 

Ответить

vovin_fm

Дата: Четверг, 25.04.2013, 23:43 |
Сообщение № 14

Группа: Пользователи

Ранг: Прохожий

Сообщений: 3


Репутация:

0

±

Замечаний:
0% ±


2016

Цитата (RAN)

[vba]

Код

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count <> 1 Then Exit Sub
If Not Intersect(Target, Columns(1)) Is Nothing Then
If Len(Target) Then Target(, 2) = Date Else Target(, 2) = «»
End If
End Sub

[/vba]

RAN,

Добрый вечер! Нужна помощь!
Следуя Вашему примеру попытался сделать автоматическое отображения даты в столбце «B» при изменение параметра списка в столбце «D» в каждой строке, но ничего не получилось! Необходимо чтобы дата менялась на всю возможную длину столбца, т.к. к этому списку постоянно добавляется новая информация. (Моё первое общение с VBA)
Заранее спасибо!!

 

Ответить

RAN

Дата: Пятница, 26.04.2013, 00:28 |
Сообщение № 15

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

[vba]

Код

Private Sub Worksheet_Change(ByVal Target As Range)
     If Target.Count <> 1 Then Exit Sub
     If Not Intersect(Target, Columns(4)) Is Nothing Then
         If Len(Target) Then Target.Offset(, -2) = Date Else Target.Offset(, -2) = «»
     End If
End Sub

[/vba]


Быть или не быть, вот в чем загвоздка!

 

Ответить

oxid

Дата: Четверг, 22.08.2013, 17:19 |
Сообщение № 16

Группа: Пользователи

Ранг: Прохожий

Сообщений: 1


Репутация:

0

±

Замечаний:
0% ±


Excel 2010

Привет.
Ребят, помоги те пожалуйста, я в VBA совсем не алё, пользуюсь готовыми решениями, подгоняя их по своим требованиям.
Способ о котором идет речь в этой ветке, подходит к моим требованиям, но разобраться с ним не могу никак, голову уже сломал.

Суть:
— При смене статуса (оранж. поле) из выпадающего списка, хочу чтобы ставилось время смены статуса в соответствующем поле.
— Та же ситуация с Объектами (синее поле), при выборе Объекта, хочу чтобы проставлялось время его выбора в горизонте в соответствующем поле.

Но есть сложность, в файле уже работает один макрос, в первой группировке, фиксирует время прихода при выборе имени сотрудника.

Помогите плиз, вот надо сделать велосипед их этого файл и превратить в конфетку.

Как реализовать проставление даты при выборе статусов из выпадающего списка?

Сообщение отредактировал oxidЧетверг, 22.08.2013, 17:19

 

Ответить

RAN

Дата: Пятница, 23.08.2013, 00:17 |
Сообщение № 17

Группа: Друзья

Ранг: Экселист

Сообщений: 5645

Но есть сложность, в файле уже работает один макрос

Никакой ложности здесь нет.

При смене статуса (оранж. поле) из выпадающего списка, хочу чтобы

Ежели-бы вы потрудились сделать эти списки…
А на нет и …


Быть или не быть, вот в чем загвоздка!

 

Ответить

Как автоматически записывать дату и время при изменении ячейки?

Нам легко вставить статическую дату и время вручную или вставить динамическую дату, меняющуюся вместе с системным временем, с помощью формулы. Если вы хотите автоматически записывать дату и время при изменении или вводе значений, эта проблема может быть несколько иной. Но в этой статье вы можете решить эту задачу, выполнив следующие шаги.

Автоматическая запись даты и времени при изменении ячейки с помощью кода VBA


стрелка синий правый пузырь Автоматическая запись даты и времени при изменении ячейки с помощью кода VBA

Например, у меня есть диапазон значений, и теперь, когда я изменяю или ввожу новые значения в столбец B, я хочу, чтобы в столбце C автоматически записывались текущая дата и время, как показано на следующем снимке экрана:

doc-update-time-value-changes-1

Вы можете завершить эту задачу с помощью следующего кода 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

doc-update-time-value-changes-1

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-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка 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.

Ezoic

Вопрос по Excel: Автовставка фиксированной даты

Тема в разделе «Софт», создана пользователем Dirk Pitt, 10.04.09.

  1. Каждый день в таблицу Exel вносятся данные — номера. Задача: Чтобы при вводе значения, например, в ячейку B1, в ячейке А1 автоматически устанавливалась дата внесения значения в ячейку В1 и т.д. После того, как дата занесена в ячейку А1, она не должна изменяться, если не меняется соответствующая ячейка В1. Изначально попробовал воспользоваться функцией =СЕГОДЯ(), как =ЕСЛИ(B1>0; СЕГОДНЯ(); » «). Да, дата подставляется (например, 8.04.2009), но если дальше продолжать заполнять поля В на следующий день, или на следующий день сохранить/открыть/обновить страницу, то все даты из ячеек А заменяются на сегодняшнюю (например, 9.04.2009). Как сделать так, чтобы дата подставлялась фиксированная и не менялась? Вариант Ctrl + ; известен, но это ручное заполнение, не то. Автозаполнение датой тоже не подходит, так как ячейки заполняются не последовательно, а вразнобой. Поэтому интересует больше формула.
    На сайте office.microsoft.ru также решения не нашел. Там говориться о СЕГОДНЯ() и ТДАТА(), но они динамически меняются с обновлением документа. Что касается фиксированной даты, то Microsoft предлагает использовать комбинацию Ctrl+;. Но вот только это не решение…
    Заранее спасибо.


  2. Sem

    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 If

    End Sub

  3. Sem,
    Спасибо. Только надо, чтобы даты проставлялись только на одном листе. Просто в книге 9 листов, а данный макрос распространяет свое действие на все листы в целом. Также задача усложняется еще и тем, что на нужном листе есть несколько колонок, куда должны автоматически подставляться даты B->A; I->H, L->K (например, при заполнении В1 дата ставится в А1; I4-H4; L2-K2)
    Еще раз спасибо.


  4. Sem

    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 If

    End Sub

    Последнее редактирование: 12.04.09

  5. 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
ссылки
статистика

Понравилась статья? Поделить с друзьями:
  • Филворд на тему word
  • Фиксация адреса ячейки в excel
  • Фиксируем строки в excel
  • Физические символы в word
  • Фиксировать листы в excel