Как сохранить историю изменений данных из одной книги или листа Excel в другой книге или листе

Как сохранить историю изменений данных из одной книги или листа Excel в другой книге или листе

добрый день,

Я работаю над таблицей Excel, в которой есть таблица данных. Эти данные представляют несколько показателей, которые мой отдел хочет отслеживать. Всякий раз, когда кто-то хочет заполнить таблицу новыми данными, предыдущие данные в ячейках теряются.

Как кто-то может создать отдельный лист, где можно автоматически сохранять все значения этой таблицы? Я имею в виду, когда в одной из ячеек таблицы вносятся изменения, новое значение автоматически сохраняется в другой таблице, которая будет хранить все значения (старые и новые) ячеек? Я пробовал "отслеживать изменения", но не уверен, нравится ли мне этот способ.

Кто-нибудь знает более эффективный способ сделать это? Через макрос например?

Спасибо!

решение1

(Я использую мобильный телефон, поэтому сейчас не могу дать развернутый ответ.)

Я написал код именно для этого. Моей целью было отслеживать все изменения на критическом листе, редактируемом несколькими пользователями. Если возникал спор о том, откуда взялись данные, я мог просмотреть журнал. Вот фрагменты VBA, которые пригодятся.

Worksheet_Changeсобытие будет срабатывать каждый раз при изменении рабочего листа.

If Not Intersect(Target, Range("A1:G12")) Is Nothingсообщит вам, находятся ли измененные ячейки в нужном вам диапазоне.

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

Попробуйте и посмотрите, как далеко вы зайдете. Завтра я могу быть немного более многословным.


На следующий день редактирование

Вот код, который будет следить за диапазоном A1:G12на любом листе, в котором есть код. Если rэто строка, которая была изменена, то код скопирует все из Ar:Grв лист, чейкодовое имяравно shtLog. (Кодовое имя — это имя, отображаемое в VBA, а не имя на вкладке, которое вы видите в Excel.) Это должно помочь вам двигаться в правильном направлении.

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim r As Integer
    Dim c As Integer
    Dim arr(1 To 1, 1 To 12)
    If Not Intersect(Target, Range("A1:G12")) Is Nothing Then
        r = Target.Row
        For c = 1 To 12
            arr(1, c) = Cells(r, c).Value
        Next
        With shtLog
            .Range(.Cells(.UsedRange.Rows.Count + 1, 1), .Cells(.UsedRange.Rows.Count + 1, 12)) = arr
        End With
    End If
End Sub

решение2

Встроенная функция «Отслеживание изменений» скорее всего будет гораздо более надежной, чем любое отслеживание изменений, которое вы попытаетесь реализовать с помощью макросов. Придерживайтесь этого.

решение3

Мы (отказ от ответственности, я основатель) создали систему аудита для Excel (похожую на Google Docs, но для Excel). Она не требует общей рабочей книги, а аудит сохраняется в локальной базе данных SQL, поэтому к ней можно получить доступ из любой рабочей книги и сохранить ее как отдельный лист. Посмотрите:http://www.officeautomata.com

решение4

С функцией Append в Sheetgo вы можете сохранять историю изменений переменных в Excel. Подробнее в этом блоге:https://blog.sheetgo.com/how-to-solve-with-sheetgo/track-changes-in-excel-files/(*отказ от ответственности: я являюсь соучредителем Sheetgo).

Связанный контент