2012-04-04 16 views
8

セルの値が一定の値を超えた場合、ポップアップ(vbOKOnly)を表示する簡単なマクロを作成しようとしています。ターゲットセルの数式が特定の値を超えた場合にメッセージボックスのポップアップを表示するVBAコード

私は基本的に製品と割引のあるワークシートを持っています。私は1つのセル、たとえばA1で、割引をすべてのエントリのパーセント(50%または.5)有効割引として表示する式を持っています。

私が探しているのは、別のセルの入力が50%を超えて割引をプッシュしたため、セルA1の値が50%を超えるとメッセージボックスを表示するコードです。

ありがとうございます!

+3

条件付き書式設定について知っていますか?条件付き書式設定にMsgBoxを使用する理由はありますか? –

答えて

14

あなたのシートに次の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は、他のスプレッドシートにあるデータに依存している場合、あなたがそのデータを変更した場合、マクロは呼び出されませます。
  • あなたのシート上で何かが変わるたびにマクロが呼び出されます。それが(1000sのように)たくさんの公式を持っているなら、それは遅くなるかもしれません。

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

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

結論:A1は、同じシート上にあるデータに依存する場合、Worksheet_Changeを使用しない場合はWorksheet_Calculateを使用しています。

+0

はい、あなたは正しいです。私は自分の投稿を削除した。私は質問を間違って読んだようです:) +1それを得るための+1 :) –

+0

@SiddharthRout正直私は質問の第3行を読むまで、データの検証と答えた;) – assylias

+0

LOL @ assylias。私たちはまだ人間だと思い出させてくれる;) –

1

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

+2

ループは必要ありません。 – assylias

+1

@assyliasローカライズされたスクリプトの行に沿って、上記のセルに集中することを考えていましたが、もしあなたが提供したメソッドを使用すれば、ループは必要ありませんが、スプレッドシートのデータが多いほど、走る –

+0

@assylias件名の検索中にこれが見つかりました。実際にマットは正しいです。ループはVBaの構文では使用されませんが、実際にはWorksheet_Changeは定数の「ループ」呼び出しです。言い換えれば、それは「何も起こっていません」という内部呼び出しです。何ミリ秒毎に何度も繰り返します。 – ejbytes

2

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

VBAエディタの[プロジェクト]ウィンドウで、コードを追加するシートをダブルクリックし、エディタウィンドウの上部にあるドロップダウンから[ワークシート]と[計算]を選択し、右それぞれ。値が> 0.5または50%であるかどうかを確認するために

Private Sub Worksheet_Calculate() 

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

End Sub 

この方法では、ワークシートを再計算するたびに、それがチェックされます:

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

関連する問題