web-dev-qa-db-ja.com

ターゲットセルの数式が特定の値を超えた場合にメッセージボックスのポップアップを表示するVBAコード

セルの値が特定の値を超えた場合にポップアップ(vbOKOnly)を表示する単純なマクロを作成しようとしています。

基本的に、製品と割引が記載されたワークシートがあります。 1つのセル(A1など)に数式があり、すべてのエントリの割引率(50%または.5)をパーセントで示しています。

私が探しているのは、セルA1の値が50%を超えた場合にメッセージボックスを表示するコードです。これは、別のセルの入力により割引が50%を超えたためです。

ありがとう!

9
Hatt

次のVBAコードをシートに追加できます。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("A1") > 0.5 Then
        MsgBox "Discount too high"
    End If
End Sub

シート上でセルが変更されるたびに、セルA1の値がチェックされます。

ノート:

  • a1が他のスプレッドシートにあるデータにも依存している場合、そのデータを変更すると、マクロはnotが呼び出されます。
  • 呼び出されるマクロは、シートで何かが変更されるたびに呼び出されます。 (1000年代のように)多数の数式がある場合は、時間がかかる可能性があります。

Widor は異なるアプローチを使用します(Worksheet_Calculateの代わりにWorksheet_Change):

  • 長所:A1の値が他のシートにあるセルにリンクされている場合、彼の方法は機能します。
  • 短所:他のシートを参照するリンクがシートに多数ある場合、彼の方法は少し遅くなります。

結論:A1が同じシートにあるデータのみに依存する場合はWorksheet_Changeを使用し、そうでない場合はWorksheet_Calculateを使用します。

17
assylias

基本的に、関連するワークシートのCalculateイベントにコードを追加します。

VBAエディターの[プロジェクト]ウィンドウで、エディターウィンドウの上部にあるドロップダウンリストからコードを追加するシートをダブルクリックし、左右の[ワークシート]と[計算]をそれぞれ選択します。

または、使用するシートのエディターに次のコードをコピーします。

Private Sub Worksheet_Calculate()

If Sheets("MySheet").Range("A1").Value > 0.5 Then
    MsgBox "Over 50%!", vbOKOnly
End If

End Sub

この方法では、ワークシートが再計算するたびに、値が> 0.5または50%であるかどうかが確認されます。

2
Widor

セルの内容をチェックするためにループで実行されるVBコードが必要な場合、またはマクロを実行する予定がない場合、メッセージボックスはこれに最適な方法だとは思わないこの場合、値が上限を超えている場合、セルに条件付き書式を追加して背景を赤(たとえば)に変更すると良いと思います。

1
Matt Donnan