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

Ключевой сценарий: Для листов, где вы часто проверяете или сверяете изменения — например, в инвентаризации, журналах или финансовом учёте — видимость предыдущих значений может сэкономить время и минимизировать риск случайной потери данных.
Для начала откройте лист, на котором вы хотите сохранять предыдущие значения. Затем выполните следующие действия:
1. Щёлкните правой кнопкой мыши по вкладке листа и выберите в контекстном меню пункт «Просмотреть код» — откроется редактор Visual Basic for Applications (VBA). См. скриншот:

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» и нажмите «ОК», как показано:

4. Нажмите «Alt» + «Q», чтобы закрыть редактор VBA и вернуться на лист.
Теперь при каждом изменении значения в столбце C Excel будет автоматически сохранять его предыдущее значение — либо копируя в столбец G, либо добавляя в комментарий ячейки. Это обеспечит удобный контроль и проверку изменений, гарантируя доступность исторических данных для анализа, аудита или исправления ошибок.
Пример результата сохранения предыдущих значений ячеек в других ячейках:

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

Советы и устранение неполадок:
- Если макросы 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
Раскройте весь потенциал 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.
- Единый комплект— надстройки для Excel, Word, Outlook и PowerPoint + Office Tab Pro
- Один установщик, одна лицензия— настройка занимает считанные минуты (готово для MSI)
- Лучше работать вместе— оптимизированная продуктивность во всех приложениях Office
- 30-дневная полнофункциональная пробная версия— без регистрации и кредитной карты
- Лучшее соотношение цены и качества— экономия по сравнению с покупкой отдельных надстроек