dポイントプレゼントキャンペーン実施中!

こんにちはsouです。Excelでちょっと困っています。「A1セルに文字を入力したときの時間をA2セルに表示する」+「A3セルに文字を入力したときの時間をA4セルに表示する」
+「A5セルに文字を入力したときの時間をA6セルに表示する」
ように複数それぞれ文字を入力した別々の時間を表示したいのですが実際やってみるとなかなか出来ませんでした。A2セルの書式をhh:mmなどにして、セルに=if(A1<>"",NOW(),"")と書きました。これで一応A1セル入力でA2セルに時間は挿入されますが、Excelの自動計算機能により、
一度閉じてまた開いた場合や他のセルで自動計算を行うような入力をした際などに時間が更新されてしまいます。時間が更新されてしまってはだめなんです。かといってツール→オプションから自動計算を手動にすると、その他の計算(例えばSUM関数など)の自動計算に影響がでて、使い勝手が違ってくるし。。。。
VBAで
Private Sub Worksheet_Change(ByVal Target As Excel.Range)Dim r As Range For Each r In Target  If r.Column = 1 Then    r.Offset(0, 1).Value = Format(Now, "hh:mm:ss")  End If Next rEnd Sub

とネットで調べて書いてみましたが 一つのセルに文字入力したらすべてのセルに同じ時間が表示反映
されてしまいます。どうすればよろしいんでしょうか?お分かりになる方ご返答宜しく御願い致します。

A 回答 (3件)

先のNo.2のコードで



 Application.EnableEvents = False
 ︙
 Application.EnableEvents = True

は無くても正しく動きますね。もちろんあっても問題ありません。
    • good
    • 0

> 一つのセルに文字入力したらすべてのセルに同じ時間が表示反映


ということなので 先の kigoshi 様の回答に入力セルの制限をかければいいと思います。
例えば、A列に限るのであれば

Private Sub Worksheet_Change(ByVal Target As Range)
'
Application.EnableEvents = False
'
If Target.Column = 1 Then
Target.Offset(0, 1).Value = Format(Now, "hh:mm:ss")
End If
Application.EnableEvents = True
End Sub

とすればいいと思います。
 Target.Column = 1 の値を変えれば他の列にも使えます。行を制限するのであれば Target.Row とすれば行でも使えます。
    • good
    • 0

Target.Offset(0, 1).Value = Format(Now, "hh:mm:ss")のときセルの内容が変わるので、Worksheet_Changeを再度呼び出してしまうことが原因ですね。


Application.EnableEvents = False
で、イベントを抑制し、時刻を入力。
で直後にイベントを呼び出せるように
Application.EnableEvents = True
とすれば、よろしいかと。

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim r As Range
Application.EnableEvents = False
Target.Offset(0, 1).Value = Format(Now, "hh:mm:ss")
Application.EnableEvents = True
End Sub
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A