• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル VBA の質問です。)

エクセルVBAでA2~A20のセルに文字を入力したら、B2~B20に入力日時を自動表示する方法

このQ&Aのポイント
  • エクセルVBAを使用して、A2~A20までのセルに文字を入力した際に、それぞれのセルの隣のB2~B20に入力日時を自動で表示する方法を教えてください。
  • また、同様の条件をE2~E20とF2~F20にも適用したい場合、VBAの記述をどのように変更すればよいですか?
  • よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

Private Sub Worksheet_change(ByVal Target As Range) Application.EnableEvents = False Dim Rng As Range Dim c As Range Set Rng = Range("A2:A20,E2:E20") If Intersect(Target, Rng) Is Nothing Then GoTo ext For Each c In Rng If Not IsEmpty(c) Then c.Offset(, 1).Value = Now Else c.Offset(, 1).ClearContents End If Next Rng.Offset(, 1).EntireColumn.AutoFit ext: Application.EnableEvents = True End Sub --- (1)範囲拡張 Set Rng = Range("A2:A20,E2:E20") (2)Application.EnableEvents = Falsewo をいれた。 c.Offset(, 1).Value = Now でChangeイベントの中にこないように 同時にIf Intersect(Target, Rng) Is Nothing Then GoTo ext に変えてApplication.EnableEvents = True を通るように (3)For Each c In Intersect(Target,Rng) を無駄を省いた。 For Each c In Rng で良いようだ。

shinshinranran
質問者

お礼

無事、出来上がりました。 どうもありがとうございました。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

#3です。 もっとコードを省いて Private Sub Worksheet_change(ByVal Target As Range) Application.EnableEvents = False Dim Rng As Range Set Rng = Range("A2:A20,E2:E20") If Intersect(Target, Rng) Is Nothing Then GoTo ext Target.Offset(, 1).Value = Now Rng.Offset(, 1).EntireColumn.AutoFit ext: Application.EnableEvents = True End Sub で良いのではないかと思いました。これで結果が、都合悪いですか。

shinshinranran
質問者

お礼

どうもありがとうございました。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

Set Rng = Range("A2:A20") を Set Rng = Range("A2:A20, E2:E20") として様子をみてください。

shinshinranran
質問者

お礼

どうもありがとうございました。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

変更前: Set Rng = Range("A2:A20") 変更後:ご相談に書かれたとおり Set Rng = Range("A2:A20,E2:E20,F2:F20") しかし実際には,E2:E20とF2~F20では全然ダメなのは明白ですね。 倣って適切に修正し,利用して下さい。

shinshinranran
質問者

お礼

どうもありがとうございました。