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