- ベストアンサー
エクセルVBAでA2~A20のセルに文字を入力したら、B2~B20に入力日時を自動表示する方法
- エクセルVBAを使用して、A2~A20までのセルに文字を入力した際に、それぞれのセルの隣のB2~B20に入力日時を自動で表示する方法を教えてください。
- また、同様の条件をE2~E20とF2~F20にも適用したい場合、VBAの記述をどのように変更すればよいですか?
- よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
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 で良いようだ。
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
#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 で良いのではないかと思いました。これで結果が、都合悪いですか。
お礼
どうもありがとうございました。
- xls88
- ベストアンサー率56% (669/1189)
Set Rng = Range("A2:A20") を Set Rng = Range("A2:A20, E2:E20") として様子をみてください。
お礼
どうもありがとうございました。
- keithin
- ベストアンサー率66% (5278/7941)
変更前: Set Rng = Range("A2:A20") 変更後:ご相談に書かれたとおり Set Rng = Range("A2:A20,E2:E20,F2:F20") しかし実際には,E2:E20とF2~F20では全然ダメなのは明白ですね。 倣って適切に修正し,利用して下さい。
お礼
どうもありがとうございました。
お礼
無事、出来上がりました。 どうもありがとうございました。