こんにちは、
私はデータの表がある Excel シートで作業しています。このデータは、私の部門が追跡したいいくつかの指標を表しています。誰かが新しいデータを表に入力しようとすると、セル内の以前のデータが失われます。
どのようにして、そのテーブルのすべての値を自動的に保存できる別のシートを作成できますか? つまり、テーブル セルの 1 つに変更が加えられたときに、新しい値が別のテーブルに自動的に保存され、セルのすべての値 (古い値と新しい値) が保持されるということですか? 「変更の追跡」を試しましたが、この方法が気に入るかどうかはわかりません。
これをもっと効率的に行う方法を誰か知っていますか? たとえばマクロを使うとか?
ありがとう!
答え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
Sheetgo の追加機能を使用すると、Excel で変更された変数の履歴を保存できます。詳細については、こちらのブログ投稿をご覧ください。https://blog.sheetgo.com/how-to-solve-with-sheetgo/track-changes-in-excel-files/(*免責事項:私はSheetgoの共同設立者です)。