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

完全に素人ですみません。

  A B C D E F
1 1 2    1
2 2 4    2
3 1 1    0
4 
5

E1=B1-A1の数式が入ってます。 
F1=D1-C1の数式が入ってます。
E列、F列が+になった場合のみコメントをメッセージボックスで出現させたいです。
以下のコードでやってみましたが、E1が+1となった場合はメッセージボックスが出てきてよいのですが、E2も+1となった場合は、メッセージボックスが2回出てきます。
一度だけ出現するようにするにはどうすればよいですか?
何卒、よろしくお願い申し上げます。

Private Sub Worksheet_Change(ByVal Target As Range)
If Range("E1").Value > 0 Then MsgBox "コメント"

If Range("E2").Value > 0 Then MsgBox "コメント"

If Range("E3").Value > 0 Then MsgBox "コメント"

If Range("F1").Value > 0 Then MsgBox "コメント"

If Range("F2").Value > 0 Then MsgBox "コメント"

If Range("F3").Value > 0 Then MsgBox "コメント"
End Sub

質問者からの補足コメント

  • 補足で、上記を加工して以下のようにしたいのですが、可能でしょうか?

     A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
    1 
    2 
    3 
    4       2            2
    5       3            2              1 0
    6       3            2
    7       2            3              -1 1  

    34      3            1
    35      4            2              1 1 
    E列にて、E5-E4の値をV5に返しています。
    M列にて、M5-M4の値をW5に返しています。
    この時、V列及びW列が+になった場合に1回のみメッセージボックスを表示させたいです。
    何卒、よろしくお願い申し上げます。

    No.1の回答に寄せられた補足コメントです。 補足日時:2016/11/11 10:52

A 回答 (3件)

補足でというより、まず検証結果を書いて頂きたかったです。


それでいいという前提です。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim tmp As Variant
If Target.Count > 1 Then Exit Sub
If Target.Row < 5 Or Target.Column <> 5 And Target.Column <> 13 Then Exit Sub
If Target.Column = 5 Then
tmp = Range("V" & Target.Row)
Else
tmp = Range("W" & Target.Row)
End If
If tmp > 0 Then
MsgBox "コメント"
End If
End Sub
    • good
    • 1
この回答へのお礼

ありがとうございます<m(__)m>
完璧に思い通りに作動しました!

お礼日時:2016/11/11 15:08

こんにちは。



>E列、F列が+になった場合のみコメント

+1 ということは、(動的に)増加したことであって、数値がプラスでも増加しなければ、コメントは出さない、ということだと思いました。難易度3~4クラスの難問のひとつだと思いました。

しかし、コードをみるとその様子はないようです。#1さんの回答も同様です。

私の読み違えでしたら、この以下のコードの解釈は間違っています。

'//
Dim mem
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim ans As Variant
 Dim rng As Range
 Dim ret as Variant
 If Target.Count > 1 Then Exit Sub
 If Target.Column > 2 Then Exit Sub
 If Target.Value = "" Then Exit Sub
 Set rng = Target(1).DirectDependents
 If Intersect(rng, Columns("E:F")) Is Nothing Then Exit Sub
 Application.EnableEvents = False
 If Target.Value <> "" Then
  ret = Target.Value
  ans = Target.DirectDependents.Value
  Application.Undo
  mem = Target.DirectDependents.Value
  Target.Value = ret
 End If
 If ans > mem Then
  MsgBox "Increased"
 End If
 Application.EnableEvents = True
End Sub
    • good
    • 0

A列からD列までの入力で実行させたいイベントなので、その列もチェックした方がいいです。

一例です。

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target.Column > 4 Then Exit Sub
If Target.Column < 3 Then
tmp = Range("E" & Target.Row)
Else
tmp = Range("F" & Target.Row)
End If
If tmp > 0 Then
MsgBox "コメント"
End If
End Sub
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございます(^_-)-☆
早速試してみます!

お礼日時:2016/11/11 10:15

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

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