ここから本文です

Excel VBAを使って変更履歴を保存したいですが下記のようなことはできますか? ...

nya********さん

2013/7/2511:41:44

Excel VBAを使って変更履歴を保存したいですが下記のようなことはできますか?

変更した履歴を「変更履歴」シートに記録
変更日&変更したセル(内容)&変更した人の名前「変更履歴」シートに記録
宜しくお願いします

閲覧数:
11,299
回答数:
2
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

set********さん

編集あり2013/7/2601:39:14

そんな必要があるのかなとも思いますが・・・
エクセル2003の場合です。
下の図を見て下さい。このようなイメージで記録されるのでよければ、
変更されるセルのあるシート(例えばSheet1とします)のシートモジュールに下記を貼り付けて下さい。
Sheet1のセルが変更される度に記録されていきます。B列には変更したセル番地が、C列にはセルを変更後の値が入ります(変更前のデータを記録することは不可能ですので・・)。
なお、変更履歴が記録されるシート名は「変更履歴」として下さい。
それと、そのエクセルシートを変更する人の名前はどこからどのように引っ張ってくるのか分からないので、省略しました。ご自分で考えて下さい。
また、一気に大量のデータを変更(データの貼り付けなど)すると、たぶん動きが遅くなると思います。
また、履歴データが行の最終行まで行ってしまった場合、どうなるかはテストしてませんので責任は持てませんので・・・

追伸
「変更履歴」のシートモジュールには、絶対、下記のプロシージャを貼り付けないで下さい。無限ループと同じ状態になりますので・・・
それと、履歴データが行の最終行まで行ってしまった場合に、それ以降は記録しないように変更しました。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim X As Integer, Y As Integer
Dim LastRow As Long
X = Target.Column
Y = Target.Row
If Worksheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Row = Rows.Count Then
Exit Sub
End If
LastRow = Worksheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Row + 1
Worksheets("Sheet2").Range("A" & LastRow) = DateValue(Now())
Worksheets("Sheet2").Range("B" & LastRow) = Target.Address(Y, X)
Worksheets("Sheet2").Range("C" & LastRow) = Cells(Y, X)
End Sub

そんな必要があるのかなとも思いますが・・・
エクセル2003の場合です。...

質問した人からのコメント

2013/7/31 16:54:57

ありがとうございます。名前などは検索して頑張って取得してみます。

ベストアンサー以外の回答

1〜1件/1件中

vba********さん

2013/7/3002:04:52

非常に重要なデータなのだと思います。バッチ型の更新処理にしたらいかがでしょうか。データ更新してからエクセルに更新履歴を作成させるのではなく、人間が更新履歴を作成してそれを入力としてエクセルにデータ更新をさせるようにしたらどうでしょうか。
逆転の発想です。

下記の手順になります。

1.手操作で更新依頼シートを作成します。

列項目は下記のとおりです。

A列 「モード」 追加、修正、削除のいずれかです
B列 「ワークシート名」 修正対象となるワークシート名です
C列 「キー」 キーを指定します。修正対象シートのA列は必ずキー欄にするべきです。1,2,3のような順番でもOKです。これで修正シートの行位置が確定します。モードが追加のときは現在は存在しないキーでなくてはなりません。
D列 「列位置」
E列 「修正前データ」 キーと列位置で指定されたセルの修正前データです。モードが追加のときは空白です
F列 「修正後データ」 モードが削除のときは空白です
G列 「コメント」 修正理由等のコメントを書きます

2.データの更新
ユーザーID、パスワード、変更依頼ブック名を起動時に入力させ「変更した人」を確定します。これはエクセルのフォームで作成すれば良いでしょう。
バッチ的にデータ更新処理を実行します。エラーがあればエラーシートに表示します。

3.変更履歴の作成
更新依頼シートのA列とB列に「変更日付」、「変更した人」を挿入し変更履歴シートを完成します。

4.バックアップ処理
データ更新処理をする前にコピーを作成しバックアップとするべきです。数世代のバックアップは必要でしょう。

あわせて知りたい

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる