KutoolsforOffice — Одно решение — пять мощных инструментов.Меньше усилий — больше результата.

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

АвторSiluviaДата изменения

При редактировании ячейки в Excel её предыдущее значение сразу же перезаписывается и больше не отображается — если только вы не отмените это действие. Если вам важно сохранить исходное значение для сравнения, аудита или отката, у вас есть два варианта: автоматически фиксировать его с помощью небольшого макроса VBA, который будет записывать предыдущее содержимое в отдельный столбец перед каждым изменением, либо отслеживать правки через встроенные инструменты Microsoft 365 — «Показать изменения» и «История версий» — при условии, что файл хранится в OneDrive или SharePoint. В этом руководстве подробно описаны оба подхода, чтобы вы могли выбрать тот, что лучше всего соответствует вашему рабочему процессу и требованиям управления данными.


Сохранение предыдущего значения ячейки с помощью кода VBA в Excel

Представьте, что у вас есть таблица, подобная приведённой на скриншоте ниже. Каждый раз, когда значение в любой ячейке столбца C изменяется, вы можете захотеть сохранить его предыдущую версию — либо в соответствующей ячейке столбца G, либо в виде комментария для удобного последующего просмотра и анализа. Такой подход особенно полезен, если вам необходимо вести постоянный журнал изменений или оперативно обращаться к старым значениям при вводе данных и проверке их качества.

Снимок экрана таблицы Excel с целевым столбцом для сохранения предыдущих значений ячеек

Ключевой сценарий: Для листов, где вы часто проверяете или сверяете изменения — например, в инвентаризации, журналах или финансовом учёте — видимость предыдущих значений может сэкономить время и минимизировать риск случайной потери данных.

Для начала откройте лист, на котором вы хотите сохранять предыдущие значения. Затем выполните следующие действия:

1. Щёлкните правой кнопкой мыши по вкладке листа и выберите в контекстном меню пункт «Просмотреть код» — откроется редактор Visual Basic for Applications (VBA). См. скриншот:

Снимок экрана с опцией «Просмотреть код» в контекстном меню вкладки листа Excel

2. В окне «Microsoft Visual Basic for Applications» вставьте приведённый ниже код VBA в окно кода. Этот макрос позволит сохранять предыдущие значения ячеек из целевого столбца в другом столбце.

Обязательно скорректируйте в коде ссылки на целевые столбцы перед запуском скрипта. В приведённых примерах «C:C» обозначает столбец, за изменениями в котором ведётся наблюдение, а число «7» соответствует столбцу G — именно туда сохраняются предыдущие значения. Настройте эти ссылки в соответствии со структурой вашей таблицы.

Код VBA: сохранение предыдущего значения ячейки в другой ячейке столбца

Dim xRg As Range
Dim xChangeRg As Range
Dim xDependRg As Range
Dim xDic As New Dictionary
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim I As Long
    Dim xCell As Range
    Dim xDCell As Range
    Dim xHeader As String
    Dim xCommText As String
    On Error Resume Next
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    xHeader = "Previous value :"
    x = xDic.Keys
    For I = 0 To UBound(xDic.Keys)
        Set xCell = Range(xDic.Keys(I))
        Set xDCell = Cells(xCell.Row, 7)
        xDCell.Value = ""
        xDCell.Value = xDic.Items(I)
    Next
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim I, J As Long
    Dim xRgArea As Range
    On Error GoTo Label1
    If Target.Count > 1 Then Exit Sub
    Application.EnableEvents = False
    Set xDependRg = Target.Dependents
    If xDependRg Is Nothing Then GoTo Label1
    If Not xDependRg Is Nothing Then
        Set xDependRg = Intersect(xDependRg, Range("C:C"))
    End If
Label1:
    Set xRg = Intersect(Target, Range("C:C"))
    If (Not xRg Is Nothing) And (Not xDependRg Is Nothing) Then
        Set xChangeRg = Union(xRg, xDependRg)
    ElseIf (xRg Is Nothing) And (Not xDependRg Is Nothing) Then
        Set xChangeRg = xDependRg
    ElseIf (Not xRg Is Nothing) And (xDependRg Is Nothing) Then
        Set xChangeRg = xRg
    Else
        Application.EnableEvents = True
        Exit Sub
    End If
    xDic.RemoveAll
    For I = 1 To xChangeRg.Areas.Count
        Set xRgArea = xChangeRg.Areas(I)
        For J = 1 To xRgArea.Count
            xDic.Add xRgArea(J).Address, xRgArea(J).Formula
        Next
    Next
    Set xChangeRg = Nothing
    Set xRg = Nothing
    Set xDependRg = Nothing
    Application.EnableEvents = True
End Sub

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

Код VBA: сохранение предыдущего значения ячейки в комментарии

Dim xRg As Range
Dim xChangeRg As Range
Dim xDependRg As Range
Dim xDic As New Dictionary
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim I As Long
    Dim xCell As Range
    Dim xHeader As String
    Dim xCommText As String
    On Error Resume Next
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    xHeader = "Previous value :"
    For I = 0 To UBound(xDic.Keys)
        Set xCell = Range(xDic.Keys(I))
        If Not xCell.Comment Is Nothing Then xCell.Comment.Delete
        With xCell
            .AddComment
            .Comment.Visible = False
            .Comment.Text xHeader & vbCrLf & xDic.Items(I)
        End With
    Next
    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim I, J As Long
    Dim xRgArea As Range
    On Error GoTo Label1
    If Target.Count > 1 Then Exit Sub
    Application.EnableEvents = False
    Set xDependRg = Target.Dependents
    If xDependRg Is Nothing Then GoTo Label1
    If Not xDependRg Is Nothing Then
        Set xDependRg = Intersect(xDependRg, Range("C:C"))
    End If
Label1:
    Set xRg = Intersect(Target, Range("C:C"))
    If (Not xRg Is Nothing) And (Not xDependRg Is Nothing) Then
        Set xChangeRg = Union(xRg, xDependRg)
    ElseIf (xRg Is Nothing) And (Not xDependRg Is Nothing) Then
        Set xChangeRg = xDependRg
    ElseIf (Not xRg Is Nothing) And (xDependRg Is Nothing) Then
        Set xChangeRg = xRg
    Else
        Application.EnableEvents = True
        Exit Sub
    End If
    xDic.RemoveAll
    For I = 1 To xChangeRg.Areas.Count
        Set xRgArea = xChangeRg.Areas(I)
        For J = 1 To xRgArea.Count
            xDic.Add xRgArea(J).Address, xRgArea(J).Text
        Next
    Next
    Set xChangeRg = Nothing
    Set xRg = Nothing
    Set xDependRg = Nothing
    Application.EnableEvents = True
End Sub

Примечания по параметрам:

  • Число 7 в Cells(xCell.Row,7)указывает на столбец G. Измените это значение, если хотите сохранять предыдущее значение в другом столбце.
  • Range("C:C")определяет, в каком столбце будут отслеживаться изменения. При необходимости замените значение, например, на «D:D» для столбца D.

3. Чтобы включить поддержку словаря для скрипта, в редакторе VBA выберите меню «Сервис» > «Ссылки…». В открывшемся диалоговом окне «Ссылки – VBAProject» установите флажок напротив «Microsoft Scripting Runtime» и нажмите «ОК», как показано:

Снимок экрана диалогового окна «Ссылки» с выбранным компонентом Microsoft Scripting Runtime

4. Нажмите «Alt» + «Q», чтобы закрыть редактор VBA и вернуться на лист.

Теперь при каждом изменении значения в столбце C Excel будет автоматически сохранять его предыдущее значение — либо копируя в столбец G, либо добавляя в комментарий ячейки. Это обеспечит удобный контроль и проверку изменений, гарантируя доступность исторических данных для анализа, аудита или исправления ошибок.

Пример результата сохранения предыдущих значений ячеек в других ячейках:

Снимок экрана с предыдущими значениями ячеек, сохранёнными в другом столбце в Excel

Пример результата сохранения предыдущих значений ячеек в комментариях:

Снимок экрана с предыдущими значениями ячеек, сохранёнными в виде примечаний в Excel

Советы и устранение неполадок:

  • Если макросы VBA работают некорректно, перейдите в раздел «Файл» > «Параметры» > «Центр управления безопасностью» > «Параметры макросов» и выберите «Включить все макросы».
  • Проверьте ссылки на столбцы, если значения не сохраняются в нужном месте.
  • Если ошибки сохраняются, убедитесь, что библиотека «Microsoft Scripting Runtime» включена, как описано выше.

Microsoft 365 — Просмотр предыдущих и обновлённых значений ячеек с помощью «Показать изменения»и «История версий»

В Microsoft 365 вы можете проводить аудит правок — видеть, кто, что и когда изменил, включая значения до и после, — без устаревшего режима «Отслеживание изменений». Используйте «Показать изменения» для деталей на уровне ячеек и «История версий» для полных снимков файла и его восстановления.

Требования

  • Книга сохранена в OneDrive или SharePoint.
  • Выполнен вход с учётной записью Microsoft 365; автоматическое сохранение включено в положение «Вкл.».
  • Современный формат ().xlsx) — устаревший режим «Общая книга (устаревшая)» не используется.

«Показать изменения» (аудит на уровне ячеек)

1. Откройте книгу, сохранённую в облаке, и перейдите в раздел Рецензирование ▸ Показать изменения, чтобы открыть панель.
2. (Необязательно) Сначала выберите лист или диапазон, чтобы сузить результаты.
3. Просмотрите записи, чтобы увидеть автора, метку времени и значения старое → новое; щёлкните запись, чтобы перейти к соответствующей ячейке.

История версий (сравнение и восстановление)

1. Перейдите в раздел Файл ▸ Сведения ▸ История версий.
2. Откройте предыдущую версию для сравнения: скопируйте нужные ячейки или нажмите кнопку «Восстановить», чтобы откатить весь файл.

  • Команда «Показать изменения» недоступна?Сохраните файл в OneDrive или SharePoint, включите автоматическое сохранение и преобразуйте его из режима совместимости ()Файл ▸ Сведения ▸ Преобразовать). Также убедитесь, что функция «Общая книга (устаревшая)» отключена. Если команда по-прежнему недоступна в настольном приложении, попробуйте использовать Excel для веба.
  • Безопасность и блокировки: Защита книги или листа, шифрование или управление правами с помощью IRM могут отключить функцию «Показать изменения».
  • Локальные файлы: Полная история изменений не сохраняется для файлов, хранящихся только локально. Для наилучших результатов используйте историю версий через облако.
  • Нужно записывать значения прямо в ячейки?«Показать изменения» и «История версий» — это инструменты аудита. Чтобы при каждом изменении автоматически сохранять «предыдущее значение» во вспомогательный столбец, используйте небольшой макрос Worksheet_Changeна языке VBA.

Преимущества

  • Автоматический аудит: кто и когда внёс изменения, с отображением значений до и после — без использования макросов.
  • Кроссплатформенность (Windows, Mac, веб) при условии, что файл хранится в OneDrive или SharePoint.

Недостатки

  • Требуется облачное хранилище с автоматическим сохранением; детализация некоторых временных правок ограничена.
  • Не записывает предыдущие значения напрямую в ячейки; при необходимости используйте VBA для реализации бизнес-логики.

Лучшие инструменты повышения продуктивности в Office

🤖KUTOOLS AI Помощник: Преобразуйте Анализ данных с помощью:Интеллектуального выполнения   |  Генерации кода|  Создания пользовательские формулы  |  Анализа данных и построения диаграмм|  Вызова Расширенные функции
Популярные функции:Поиск, выделение или Отметить дубликаты   |  Удалить пустые строки   |  Объединить столбцы или ячеек без потери данных   |  Округление без использования формул
Супер ПОИСК:VLookup по нескольким критериям  |  VLookup по нескольким значениям  |   VLookup по нескольким листам   |   Распознавание нечетких соответствий
Расширенный раскрывающийся список:Быстрое создание выпадающего списка   |  Зависимый выпадающий список   |  Выпадающий список с множественным выбором
Управление столбцами:Добавление заданного количества столбцов|Перемещение столбцов|Переключение видимости скрытых столбцов|Сравнение диапазонов и столбцов
Избранные функции:Сетка фокусировки   |  Просмотр дизайна   |Улучшенная строка формулы   | Управление рабочими книгами и листами   |  Библиотека ресурсов(автотекст)|  Выбор даты   |  Объединить листы  |  Шифрование/Расшифровать ячейки   | Отправка писем по списку   |  Супер фильтр   |   Специальный фильтр(Фильтр ячеек с жирным шрифтом/курсив/зачёркивание…) …
Лучшие наборы инструментов 15:12 Текстовыеинструменты(Добавить текст,Удалить определенные символы, …)|   50+Типыдиаграмм(Диаграмма Ганта, …)|   40+ Практические формулы(Рассчитать возраст на основе даты рождения, …)|   19 Инструментывставки(Вставить QR-код,Вставка изображения по пути, …)|   12 Инструментыпреобразования(Преобразовать в слова,Конвертация валют, …)|   7 Объединить и разделитьИнструменты(Расширенное объединение строк,Разделить ячейки, …)|… и многое другое
Используйте Kutools на предпочитаемом языке — поддержка английского, испанского, немецкого, французского, китайского и ещё 40+ языков!

Раскройте весь потенциал Excel с помощью Kutools для Excel и ощутите эффективность как никогда раньше.Kutools для Excel предлагает более 300 расширенных функций для повышения продуктивности и Экономия времени.Нажмите здесь, чтобы получить нужную Вам функцию…


Office Tab добавляет в Office вкладки и значительно упрощает Вашу работу

  • Включите редактирование и чтение во вкладках в Word, Excel, PowerPoint, Publisher, Access, Visio и Project.
  • Открывайте и создавайте несколько документов во вкладках одного окна — вместо того чтобы использовать отдельные окна.
  • Повышает вашу продуктивность на 50 % и экономит сотни кликов мышью каждый день!

Все надстройки Kutools — один установщик

Kutools for Office — набор надстроек для Excel, Word, Outlook и PowerPoint, а также Office Tab Pro, идеально подходящий командам, работающим с разными приложениями Office.

ExcelWordOutlookTabsPowerPoint
  • Единый комплект— надстройки для Excel, Word, Outlook и PowerPoint + Office Tab Pro
  • Один установщик, одна лицензия— настройка занимает считанные минуты (готово для MSI)
  • Лучше работать вместе— оптимизированная продуктивность во всех приложениях Office
  • 30-дневная полнофункциональная пробная версия— без регистрации и кредитной карты
  • Лучшее соотношение цены и качества— экономия по сравнению с покупкой отдельных надстроек