ここから本文です

VBAで更新履歴を残すコードについて VBAで更新履歴を残すコードはかけたのです...

アバター

ID非公開さん

2019/4/918:26:01

VBAで更新履歴を残すコードについて

VBAで更新履歴を残すコードはかけたのですが、
空白(まだ何も打ち込んでいないセル)に初めて入力した履歴は

とらないようにしたいです(空白からの変更はカウントしないような)。

新規入力まで履歴をとってしまうと膨大な履歴になってしまいますし、
入力済みのデータが書き換えられたときだけを知りたいのです・・・

以下のコードに何を加えたら良いでしょうか。


Private Sub Worksheet_Change(ByVal Target As Range)

Dim X As Integer, Y As Integer
Dim LastRow As Long
Dim sheetName As Integer

X = Target.Column
Y = Target.Row
Set ws = ActiveSheet

If Worksheets("変更履歴").Range("A" & Rows.Count).End(xlUp).Row = Rows.Count Then

Exit Sub
End If

With Worksheets("変更履歴")
LastRow = .Range("A" & Rows.Count).End(xlUp).Row + 1
.Range("A" & LastRow) = Now()
.Range("B" & LastRow) = ws.Name
.Range("C" & LastRow) = Target.Address(Y, X)
.Range("D" & LastRow) = Cells(Y, X)
.Range("E" & LastRow) = UserInfo(1)

End With
End Sub

閲覧数:
55
回答数:
2
お礼:
100枚

違反報告

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

プロフィール画像

カテゴリマスター

kky********さん

2019/4/919:36:26

UserInfo(1) は説明がなくエラーになるのでコメントにしてあります。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim nvalue As Variant
Dim X As Integer, Y As Integer
Dim LastRow As Long
If Worksheets("変更履歴").Range("A" & Rows.Count).End(xlUp).Row = Rows.Count Then Exit Sub
X = Target.Column
Y = Target.Row
nvalue = Target.Value
Application.EnableEvents = False
Application.Undo
If Target.Value <> "" Then
With Worksheets("変更履歴")
LastRow = .Range("A" & Rows.Count).End(xlUp).Row + 1
.Range("A" & LastRow) = Now()
.Range("B" & LastRow) = ActiveSheet.Name
.Range("C" & LastRow) = Target.Address(Y, X)
.Range("D" & LastRow) = nvalue
'.Range("E" & LastRow) = UserInfo(1)
End With
End If
Target.Value = nvalue
Application.EnableEvents = True
End Sub

この回答は投票によってベストアンサーに選ばれました!

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

1〜1件/1件中

kir********さん

2019/4/919:02:22

入力内容を保管しておき、入力前に1回戻す。
空白かどうか調べる。
保管しておいた入力内容を戻してやる。
空白だった場合は処理を抜ける。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim buf, rng As Range
On Error GoTo EX
Application.EnableEvents = False
buf = Target.Value
Set rng = ActiveCell
Application.Undo
If Target.Value = "" Then
Target.Value = buf
rng.Select
Application.EnableEvents = True
Exit Sub
Else
Target.Value = buf
rng.Select
'-------------メインの処理ここから
MsgBox "Hello"
'-------------メインの処理ここまで
End If
EX:
Application.EnableEvents = True
End Sub

どうでしょ?

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

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

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

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

閉じる

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

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

閉じる