システムwiki

タイムスタンプ付きのデータを含むログシートを保持するExcelマクロ

MesaPra 受付中 最終更新日:2022-06-12 01:55

こんにちは、

私は、計算されたセルにすべての変更を記録し、それぞれにタイムスタンプを付ける必要があるプロジェクトに取り組んでいます.状況は次のとおりです.

他のいくつかのデータシートを見て、「開口部」の数を計算している列(列K)があります.別のシートに実行中のログファイル(「ログ」と呼ばれる)を作成して、これらの「開口部」の値のいずれかが変更されるたびに、その値も変更されるようにする必要があります.
タイムスタンプとして、対応するいくつかのセル(簡単にするために、列Cの対応する行の値など)がログシートの次の空の行にコピーされます.特定のセルの開口部の値は複数回変更されるため、次のようにする必要があります.
最新の変更だけでなく、各変更の記録があることを確認してください.

私はマクロに不慣れで、これらすべての要素をまとめるのに苦労しています.

助けてくれてありがとう!

返信リスト(回答:8)

7 #
GordDib 9

このシートイベントコードは、ワークシートへの変更を追跡します

変更が保存され、日付/時刻が挿入されます 「ログシート」

コードをコピーして、[Sheet1]タブと[コードの表示]を選択します

そこにコードを貼り付け、必要に応じてターゲット範囲を変更します.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim strAddress As String
薄暗いval
Dim dtmTime As Date
Dim Rw As Long
Intersect(Target、Range( "A1:M1000"))が何もない場合は、Subを終了します
'範囲を適切に変更
dtmTime= Now()
val= Target.Value
strAddress= Target.Address
Rw= Sheets( "Log Sheet").Range( "A"&Rows.Count).End(xlUp).Row + 1
シート付き( "ログシート")
.Cells(Rw、1)= strAddress
.Cells(Rw、2)= val
.Cells(Rw、3)= dtmTime
で終わる
サブの終了

ゴード

応答7# ->にスキップ
6 #
MesaPra

もう1つの質問-他の列のセルの値も返すようにする方法はありますか?たとえば、列C?

私のデータは列に格納されているので、K4で行われた変更については、C4の値を出力する必要があります.

これは私が試したことです

strAddress=(C&Target.Row).Value

応答6# ->にスキップ
5 #
GordDib 1

コードに列を追加する方法は次のとおりです.

ターゲット範囲を変更します......

Intersect(Target、Range( "C:C、K:K"))が何もない場合は、Subを終了します

他の例.....

Intersect(Target、Range( "A:A、C:C、E:G、K:K"))が何もない場合は、Subを終了します

ゴード

応答5# ->にスキップ
2 #
MesaPra

ターゲットに列を追加したくありません.追加の列が変更される心配はありません.

ターゲットセルに対応する同じ行の列Cに値を出力したいだけです.

印刷ステートメントを変更できるはずだと思います.以下を参照してください.

Intersect(Target、Range( "K:K"))が何もない場合は、Subを終了します
'範囲を適切に変更
dtmTime= Now()
val= Target.Value
strAddress=***行Target.Rowの値ですが、列C***

Rw= Sheets( "Req Log").Range( "A"&Rows.Count).End(xlUp).Row + 1
シーツ付き( "要求ログ")
.Cells(Rw、1)= strAddress
.Cells(Rw、2)= val
.Cells(Rw、3)= dtmTime
で終わる

応答2# ->にスキップ
3 #
GordDib 2

迷子になっていますが.....

このように変更しますか?

ターゲットあり
val=.Offset(0、-8).Value
strAddress=.Offset(0、-8).Address

で終わる

ゴード

応答3# ->にスキップ
1 #
MesaPra

それでした!どうもありがとう!

応答7# ->にスキップ
8 #
MesaPra 1

ゴード、

これはまさに私が探していたものです!どうもありがとう!

応答8# ->にスキップ
4 #
GordDib 1

追跡したいシートであるため、コードは「求人」のモジュールに保存されます.

このように「A1:M1000」を「K:K」に変更します

Intersect(Target、Range( "K:K"))が何もない場合は、Subを終了します

変更がログに記録される「ログシート」という名前のシートがあることを確認してください.

ブックをマクロ対応*.xlsm

として保存したことを確認してください

ゴード