『日付の自動入力』(aser)
以前質問させていただいた内容に追加になります。
現在C列に計と入力された場合A列に日付が自動入力されるマクロになっているのですが、B列についても同様に日付の自動入力を追加したいのですがうまくいきません。C列との違いは何かしらの数字が入力されたら日付を入力したいのです。どうすればいいでしょうか。
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Columns("C")) Is Nothing Then Exit Sub If Target = "計" Then Target.Offset(0, 1).Resize(1, 2).Select Application.EnableEvents = False Application.CommandBars.ExecuteMso "AutoSum" Application.EnableEvents = True End If
If Intersect(Target, Columns("C")) Is Nothing Then Exit Sub If Target = "計" Then Application.EnableEvents = False Target.Offset(, -2).Value = Now Application.EnableEvents = True End If
If Target.Column <> 2 Then Exit Sub ←これ以下がネットで調べて追加したものです Application.EnableEvents = False Target.Offset(, -1).Value = Now Application.EnableEvents = True
End Sub
< 使用 Excel:Excel2016、使用 OS:unknown >
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Columns("C")) Is Nothing Then Exit Sub ← C列以外が変更だったら、即終了します。
(tkit) 2025/03/13(木) 16:41:19
既に指摘いただいているように、 Changeイベントプロシージャ内で複数のことをしようとする場合、 Exit Subで抜ける方式は相性が悪いです。
If TargetがC列なら If Targetが"計"なら オートサムを入れる A列に日付を入れる End If ElseIf TargetがB列なら A列に日付を入れる End If のような条件分岐を使うとよいでしょう。
(xyz) 2025/03/13(木) 19:09:52
その条件分岐を行った場合のコードを教えていただけますと幸いです。
(aser) 2025/03/14(金) 08:52:28
いえいえ、下記の疑似コードは殆どコードに近いですよ。Then とかが書いてないだけです。
If TargetがC列なら If Targetが"計"なら オートサムを入れる A列に日付を入れる End If ElseIf TargetがB列なら A列に日付を入れる End If
"TargetがC列なら”というのは、あなたが既に Target.Column <> 2などと使っているのですから Target.Column = 3 とすればいいわけです。 "オートサムを入れる"とかは、条件分岐には無関係で、今のものがそのまま使えます。 このほうが条件分岐の構造がより分かりやすくなると思い、わざわざ標語的に 書いているのです。
これくらいはご自分でトライされるべきだと思います。 そのことであなたの理解がさらに確実なものなるはずです。 頑張ってください。
(xyz) 2025/03/14(金) 09:45:00
このほか 別の方法として、Select Case ステートメントも使えると思います。
https://excel-ubara.com/excelvba1/EXCELVBA322.html
いずれもよく使われる基本的な文法事項です。
(xyz) 2025/03/14(金) 10:27:40
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.