[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『エクセルデータの変更前と変更後の記録』(あらいぐま)
いつも拝見させて頂いております。あるエクセルデータ を複数人が追加、変更、修正しているのですが、誰が変 更したのか、どこを変更したのか、翌日分からないとい う問題が出ました。
私としては、「誰が」はいらないとしても、どこが変更 されたのか、変更するたびに別シートにその変更履歴が 出るようにしたいのですが、そのようなことは可能でし ょうか?
変更したセル 変更前 変更後 B2 山田 村上
ブックの[共有]設定をしてしまえば自動的に変更履歴が記録されるようになります。 (私はお勧めしませんが) 一度ヘルプで調べて下さい。 (seiya)
共有にしたのですが、変更履歴というのはどこに 残るものなのでしょうか。
(あらいぐま)
http://www.atmarkit.co.jp/fwin2k/win2ktips/410excelshare/excelshare.html
こんなことですか? (seiya)
横から失礼します。 マクロOKならこんな方法が有ります。 ブックと同じフォルダに shtlog.txt というテキストファイルを作成し変更ログを記述していきます。 ブックの全てのシートが対象になります。 マクロを無効にされると機能しません。
'ThisWorkbookモジュール
'シート変更履歴
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim logtxt As String
Dim logtxtstr As String
Dim rngad As String
Dim ima As String
Dim c As Range
logtxt = ThisWorkbook.Path & "\shtlog.txt"
If Dir(logtxt) <> "" Then
Else
Call TxtOutput(logtxt, "")
End If
logtxtstr = Txtinput(logtxt)
ima = Now
For Each c In Target
rngad = Sh.Name & "/" & c.Address(0, 0)
If logtxtstr <> "" Then logtxtstr = logtxtstr & vbCrLf
logtxtstr = logtxtstr & ima & vbTab & rngad & vbTab & c.Value
Next c
Call TxtOutput(logtxt, logtxtstr)
End Sub
'標準モジュール
Function Txtinput(ByVal txtpath As String) As String
Dim fnum As Integer
Dim txtline As String
Txtinput = ""
fnum = FreeFile
Open txtpath For Input As #fnum
Do Until EOF(fnum)
Line Input #fnum, txtline
If Txtinput <> "" Then Txtinput = Txtinput & vbCrLf
Txtinput = Txtinput & txtline
Loop
Close #fnum
End Function
Function TxtOutput(ByVal newtxtpath As String, newtxtstr As String)
Dim fnum As Integer
fnum = FreeFile
Open newtxtpath For Output As #fnum
Print #fnum, newtxtstr;
Close fnum
End Function
変更後のみの記録なのでご希望のものとは違いますが、 特定のセルのアドレスを抽出すると履歴を追うことができます。
(MARBIN)
MARBIN様、ありがとうございます。
このログに、エクセルデータが開いた時に 入力する社員番号をのせたいのですが、 社員番号の変数「shaban」です。
可能でしょうか。できればログの日付と 時間の次に表示させたいのですが・・・・
(あらいぐま)
>できればログの日付と >時間の次に表示させたいのですが・・・・
こういうことですか?
>logtxtstr = logtxtstr & ima & vbTab & rngad & vbTab & c.Value
↓
logtxtstr = logtxtstr & ima & vbTab & rngad & vbTab & c.Value & VbTab & shaban
(MARBIN)
ご返信ありがとうございます。
社員番号が表示されました。ログについて一つ問題が あり、基本的にセル内への書き込みについてはマクロ を使って入力しています。
入力しようとしまいと、20個分のセルを同時に上書 きする形になり、空白であろうとそれがログに残って しまいます。またそのため、上書きをするためのコマ ンドボタンをクリックしてから、上書きの処理時間+ ログへの書き込みで、時間がかかってしまいます。
入力項目が空白だった場合、そのログは書き込まない という処理は可能でしょうか?
(あらいぐま)
'シートの変更履歴を残す処理(module2と併用) Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim logtxt As String Dim logtxtstr As String Dim rngad As String Dim ima As String Dim c As Range Dim muneban As Long
muneban = InputBox
logtxt = ThisWorkbook.Path & "\log.txt"
If Dir(logtxt) <> "" Then
Else
Call TxtOutput(logtxt, "")
End If
logtxtstr = Txtinput(logtxt)
ima = Now
For Each c In Target
rngad = Sh.Name & "/" & c.Address(0, 0)
If logtxtstr <> "" Then logtxtstr = logtxtstr & vbCrLf
logtxtstr = logtxtstr & ima & vbTab & rngad & vbTab & muneban & " - " & c.Value
Next c
Call TxtOutput(logtxt, logtxtstr)
End Sub
社員番号ではなく、munebanとして変数を使おうと上記 のようにインプットボックスでやってみると、「引数 は省略できません」と出ます。なぜでしょうか。
(あらいぐま)
MsgBoxでも単独で記入すると同じエラーになります。 MsgBox "処理を開始します" のように引数が必要です。 InputBoxの使用法をヘルプで確認してください。 (semm)
muneban = InputBox("胸番を入力して下さい。")
上記のようなインプットボックスでやってみたの ですが、数値が0として格納されているみたいで す。変数の定義はLongにしているのですが・・・
(あらいぐま)
>入力しようとしまいと、20個分のセルを同時に上書 >きする形になり、空白であろうとそれがログに残って >しまいます。またそのため、上書きをするためのコマ >ンドボタンをクリックしてから、上書きの処理時間+ >ログへの書き込みで、時間がかかってしまいます。
>入力項目が空白だった場合、そのログは書き込まない >という処理は可能でしょうか?
変更前はデータが入っていて、編集後空白になった場合 はログに残さなくていいのでしょうか?
そうでしたら、ループ中にTargetの値で条件分岐する 方法が有ります。 時間短縮に繋がるかは分かりませんが・・・。
また、特定のシートのみを対象にしたい場合は ブックのイベントではなくシートのイベントのほうが 適切です。 セル範囲を限定したい場合は、 Intersectメソッド などでイベント起動セル範囲を限定することもできます。
>muneban = InputBox("胸番を入力して下さい。")
>上記のようなインプットボックスでやってみたの >ですが、数値が0として格納されているみたいで >す。変数の定義はLongにしているのですが・・・
InputBoxで「0」を入力しない限り、「0」が格納 されることは有りません。
なお、変数の型をLongにしておくと、InputBoxを キャンセルしたりするとエラーになります。 Variant型にするなどしてキャンセルされた場合 などの条件 分岐をする必要があるように思います。 InputBox関数を使っておられますが、 「InputBox メソッド」というのも有りますので調 べてみてください。 (MARBIN)
お手数をおかけしております。当方の技術が ふがいないばかりに、ご迷惑をおかけし申し 訳ありません。
>>変更前はデータが入っていて、編集後空白になった場合 >>はログに残さなくていいのでしょうか?
ログは残さなくて結構です。現段階では空白 の分までログを出力している分の時間がかか っていると思っております。
inputboxについてはもう少し調べてみます。
(あらいぐま)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.