[[20190806221754]] 『特定セル更新日時の表示(VBA)』(Lalalaaan) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『特定セル更新日時の表示(VBA)』(Lalalaaan)

エクセルVBAで特定のセル範囲(B列〜U列)に変更を加えたらAB列のセルに、変更を行った日付をそれぞれ入れたいのですが、初心者のためうまく行きません。
どなたか教えて頂けないでしょうか。

B2〜U2の変更には日付をAB2
B3〜U3の変更には日付をAB3
B4〜U4の変更には日付をAB4
以下同様
と続きます。

よろしくお願いします。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 >初心者のためうまく行きません。

 どのようにうまくいかないのか教えてください
 コードを書かれているのなら、動かないまでもそのコードを提示してください

(渡辺ひかる) 2019/08/07(水) 09:01


 例えば対象範囲に値が入力されているのを消した場合、あるいはもともとセルに入力されているデータと同じデータを
 入力しなおした場合もその日付を入れるのだろうか?
(ねむねむ) 2019/08/07(水) 09:27

どんなやり方を考えていたのか、うまくいかなかったコードを見せてもらうのが一番なのですが、とりあえず最適化を考えずに、こんなので。
 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim R As Range
    Dim R1 As Range

    Set R = Intersect(Target, Range("B:U"))
    If R Is Nothing Then Exit Sub

    For Each R1 In R
        Cells(R1.Row, "AB").Value = Now
    Next R1
 End Sub
(???) 2019/08/07(水) 09:55

みなさん早速のご返信ありがとうございます。
できれば同じ値を入れ直した場合は、更新は変えたくないです。
データを削除、または値、文字列を変更した場合に更新日時を変更したいです。

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column > 1 And Target.Column < 22 Then
Cells(Target.Row, "AB") = Date
End If
End Sub

まではたどり着くことができました。
その後例えば行2-22までの限定範囲で上記の条件を入れたい場合どうすれば良いかご教示頂けますか。
(Lalalaaan) 2019/08/08(木) 07:47


Target.Columnを判定しているのと同じ事を、Target.Rowについても行ってみてください。(別のIf文でも良いし、And条件を加えても良いです)

ちなみに、私の書いたコードの場合は、セル範囲の貼り付けや複数行追加にも反応します。(変更点は、Range("B2:U22")にするだけ)

あと、同じ値だった場合は記録したくない、という場合は、考え方を変えて、ブックを開いたとき等にシートのコピーを取っておいて、修正したシートとコピーしてあるシートを比較してから記録、とかすれば良いでしょう。 ただし、一旦変えてから(ここで日時記録される)、元の文字列に戻した場合(ここは元と同じだから記録されない)とか気を付けないといけないし、行追加・削除があった場合に比較が難しくなるので、現状の何でも日時記録してしまう考えの方がシンプルで良いように思います。
(???) 2019/08/08(木) 09:29


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.