[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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.