For~Next(Excel VBA)
k.w
SEへの道
Excelは何でもできるので神!って思っている人多いですね。ただ、Web系アプリやインストール系のプログラムに埋め込まれているLOG(ログ)と呼ばれる 編集履歴 が残らない(自分が知らないだけ?)ので、誰が編集したかわからなくなりますよね? VBA で自動で履歴を 残す ことができたらって思ったことありませんか?
自動的に履歴(ログ)を残す。(編集制御あり)
Workbook_Sheet~というイベントプロシージャを使って、Workbookで行われたイベント(処理)を記録して、LOGシートに記載していきます。
注意点としては、Excelデータ全体に関連するマクロとなるので、ThisWorkbookに記載することです。
Dim Log As Variant
'宣言セクション(Moduleの一番上に記載する)
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) '----(1)
Log = Target.Value
End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) '----(2)
Dim clm As Long
Application.EnableEvents = False '----(3)
With Worksheets("LOG") '----(4)
clm = .Cells(Rows.Count , 1).End(xlUp).Row + 1
.Cells(clm , 1).Value = Sh.Name
.Cells(clm , 2).Value = Target.Address
.Cells(clm , 3).Value = LOG
.Cells(clm , 4).Value = Target.Value
.Cells(clm , 5).Value = Now
.Cells(clm , 6).Value = Application.UserName
End With
Application.EnableEvents = True '----(3)
'LOGシートの編集にはパスワードが必要 '----(5)
If Sh.Name = "LOG" Then
If InputBox("パスワードを入力してください") <> "password" Then
MsgBox "パスワードが正しくありません"
Application.Undo
End If
End If
End Sub
※事前準備として、データシート以外に”LOG”というシートと下図の様なタイトルを記載しておきます。
問題なければ、下記のように入力した処理の履歴が残ります。
これがあれば、悪いことできませんね・・・
と悪いことを前提にしてしまっていますが、意図せず変わってしまったり履歴を自動的に残すなど、便利なことが実現可能です。
うまく流用できれば、特定セルを入力したときの更新者を入力するなどできますよ。