[[20230306081810]] 『VBAでの時刻入力』(みみん) ページの最後に飛ぶ

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

 

『VBAでの時刻入力』(みみん)

引き継いだファイルの入力シートに、
D列に値が入ったらE列にその時間が入力されるVBAが以下に設定されています。
行の入れ替えをするとその時間に更新されてしまうのですが、
最初の入力時間をキープすることは可能でしょうか?

どこに手を加えてよいのかわからないほど知識が皆無です。
よろしくお願いします。

    Private Sub Worksheet_Change(ByVal Target As Range)

    'D列に日時の自動入力
     Dim WorkRng As Range
     Dim Rng As Range
     Dim xOffsetColumn As Integer
 
     Set WorkRng = Intersect(Application.ActiveSheet.Range("D:D"), Target)
     xOffsetColumn = 1
     If Not WorkRng Is Nothing Then
        Application.EnableEvents = False
        For Each Rng In WorkRng
        If Not VBA.IsEmpty(Rng.Value) Then
            Rng.Offset(0, xOffsetColumn).Value = Now
            Rng.Offset(0, xOffsetColumn).NumberFormat = "yyyy/mm/dd"
        Else
            Rng.Offset(0, xOffsetColumn).ClearContents
        End If
        Next
        Application.EnableEvents = True

    End If
    End Sub

< 使用 Excel:Excel2016、使用 OS:Windows10 >


 ここを
        If Not VBA.IsEmpty(Rng.Value) Then
 こう替える
        If (Not VBA.IsEmpty(Rng.Value)) And (IsEmpty(Rng.Value)) Then
 といいんじゃないかな
(´・ω・`) 2023/03/06(月) 08:59:56

ありがとうございます。

書き換えをしてみましたが、空欄となってしまいました...
(みみん) 2023/03/06(月) 09:24:47


 ごめんなさい
        If (Not VBA.IsEmpty(Rng.Value)) And (IsEmpty(Rng.Offset(0, xOffsetColumn).Value)) Then
 です
(´・ω・`) 2023/03/06(月) 09:35:51

 あ。 ↓こうじゃないとElse以下がマズいかもですよ

    If Not WorkRng Is Nothing Then
        Application.EnableEvents = False
        For Each Rng In WorkRng
            If Not VBA.IsEmpty(Rng.Value) Then
                If IsEmpty(Rng.Offset(0, x)) Then
                    Rng.Offset(0, x).Value = Now
                    Rng.Offset(0, x).NumberFormat = "yyyy/mm/dd hh:mm:ss.00"
                End If
            Else
                Rng.Offset(0, x).ClearContents
            End If
        Next
        Application.EnableEvents = True
    End If

(白茶) 2023/03/06(月) 09:40:36


 ですね

 私の回答は無視して白茶さんの回答を参考にしてください
(´・ω・`) 2023/03/06(月) 09:54:00

 お二方、早々にありがとうございました!

 白茶さんのコードをコピペして並び替えてみると、時間は更新されませんでしたが、
 新規に入力すると時間そのものが反映されず...

 並べ替えにも新規入力にも対応させることは難しいでしょうか(^^;

(みみん) 2023/03/06(月) 14:09:02


 白茶さんが提示されたコードは、変数 xOffsetColumn を x に変えているので....
 ちゃんとコードを読んだら分かると思いますので、それくらいやりませんか

 全部書いたらこーなります。

    Private Sub Worksheet_Change(ByVal Target As Range)
       Dim WorkRng As Range
       Dim Rng As Range
       Dim xOffsetColumn As Integer

       Set WorkRng = Intersect(Application.ActiveSheet.Range("D:D"), Target)
       xOffsetColumn = 1
       If Not WorkRng Is Nothing Then
          Application.EnableEvents = False
          For Each Rng In WorkRng
             If Not VBA.IsEmpty(Rng.Value) Then
                If IsEmpty(Rng.Offset(0, xOffsetColumn)) Then
                  Rng.Offset(0, xOffsetColumn).Value = Now
                  Rng.Offset(0, xOffsetColumna).NumberFormat = "yyyy/mm/dd hh:mm:ss.00"
                End If
             Else
               Rng.Offset(0, xOffsetColumn).ClearContents
             End If
          Next
        Application.EnableEvents = True
        End If
    End Sub
(´・ω・`) 2023/03/06(月) 14:24:01

 引き継いだファイルを理屈もわからず使用しており、
 コードを理解するレベルになく安易に質問してしまいました。
 そういった質問は厳禁なのですね。
 すみません。

 ありがとうございました。
(みみん) 2023/03/06(月) 14:31:29


 別に厳禁ってわけでもないと思いますが、
 何やってるか分からないコードを動かすのって気持ち悪くないですか?

 自分では書けなくても、書いてあるコードを読もうとすれば、
 ドキュメント調べながら、それなりに解読できますよ

 中学高校で辞書引きながら他国語を解読する練習されられてるんで
(´・ω・`) 2023/03/06(月) 14:38:17

コメント返信:

[ 一覧(最新更新順) ]


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