VBAのWorksheet_Changeで単一セルでの変更と複数範囲での変更で挙動を変えたい
やりたいのは複数セルがコピペなどで一度に変更されたときには何もしない。単一セルが変更されたときだけ処理をしたいです。
A列には日付と時間、B列には国名が入力されています。
そしてA列とB列に入力された値が他の行にもある場合MsgBoxを出したいのですが、
上の行のA列とB列をコピーして、その下に貼り付ける場合もあるのでその場合はMsgBoxを出したくありません。
イメージ
A1 = 2020/6/18 12:00 B1 = アメリカ
A2 = 2020/6/18 13:00 B2 = 日本
A3 = 2020/6/18 13:30 B3 = 中国
上記の状態の時A3:B3をコピーしてA下記のように4:B4に貼り付ける。このときにはMsgBoxを出したくない。
A1 = 2020/6/18 12:00 B1 = アメリカ
A2 = 2020/6/18 13:00 B2 = 日本
A3 = 2020/6/18 13:30 B3 = 中国
A4 = 2020/6/18 13:30 B4 = 中国
そして例えばB4の値を消してもう一度B4に中国と入力したときにはMsgBoxを出したい
B4の値を消して
A1 = 2020/6/18 12:00 B1 = アメリカ
A2 = 2020/6/18 13:00 B2 = 日本
A3 = 2020/6/18 13:30 B3 = 中国
A4 = 2020/6/18 13:30 B4 = ""
もう一度B4に中国と入力
A1 = 2020/6/18 12:00 B1 = アメリカ
A2 = 2020/6/18 13:00 B2 = 日本
A3 = 2020/6/18 13:30 B3 = 中国
A4 = 2020/6/18 13:30 B4 = 中国
コードは以下のように書いていますがうまくできずMsgBoxが出てしまいます
該当のソースコード
VBA
1Private Sub Worksheet_Change(ByVal Target As Range) 2 Dim tf As Boolean, r As Range 3 tf = False 4 For each r In Target 5 If r.Column = 1 Then 6 tf = True 7 End If 8 If r.Column = 2 Then 9 If tf = False Then '単一セルのときだけ処理したい 10 'ここに入力されたものが他の行にないかどうかの処理が続きます 11 . 12 . 13 . 14 If 同じものが見つかったとき Then 15 Dim rc As Integer 16 rc = MsgBox("同じものがあるで。このまま続けるん?", vbYesNo) 17 If rc = vbNo Then 18 r.Value = "" 19 r.Offset(0, -1) = "" 20 Exit Sub 21 End If 22 End If 23 End If 24 End If 25 Next r 26End Sub
試したこと
変数tfをグローバル変数にしたりしましたがもちろん意味なかったです。
For eachでTargetを繰り返して処理してると思ってたんですが違ったのでしょうかね。。。
優しき方、どうかご教授のほどお願いいたします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/18 13:07
2020/06/19 02:16