プロが教えるわが家の防犯対策術!

すいませんが教えてもらえませんか。

タイトル通り、EXCELのある箇所(例としてA1セル)の値が1→0に変化した
ときに1度だけ Macro1を実行したいと思うのですが、A1のセルに式をどう
記述したらいいかわからずに困っています。

教えてもらえると助かります。
よろしくお願いします。

A 回答 (2件)

A1セルの値が0になったときだけマクロを動かしたいなら以下のマクロを「シート名タブ右クリック」→「コードの表示」で開く画面に貼り付ければ良いです。

シートに戻りA1に0を入力してみてください

Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Address = "$A$1" And Target.Value = 0 Then
   'ここに『処理』を書く
   MsgBox("A1が0になりました")
End If
End Sub

『処理』の箇所はA1が0になったとき毎回実行されます。でも質問にある
 >1→0に変化したときに1度だけ Macro1を実行
は「前回値が1以外なら処理しない」とか「二回目に0になったときには処理をしない」などの可能性が読み取れます。

その場合ワークシートのどこかに前回値や処理を実行したことを示すフラグを書いておけば対応はできますので、ご自身で試してみてください
    • good
    • 1
この回答へのお礼

ありがとうございました。早速試したらできました。

お礼日時:2007/03/29 10:17

「1度だけMacro1を実行」というのは、Macro1が実行されたら、再びそのセルの値が1→0に変化してもMacro1は実行されない、ということでしょうか。



標準モジュールに、

Public Val1 As Integer
Public Macro1Executed as Boolean

と記述しておき、(変数名は適当です。A1の型がInteger以外なら正しい型に変えてください)

ThisWorkbookに、

Private Sub Workbook_Open()
 Val1 = Worksheets("Sheet1").Range("A1").Value
End Sub

と記述し、シートモジュールに、

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim R As Range
 Set R = Intersect(Target, Range("A1"))
 If R Is Nothing Then Exit Sub
 If Val1 = 1 And R.Value = 0 And Macro1Executed = False Then
  Macro1
  Macro1Executed = True
 End If
 Val1 = R.Value
End Sub

と記述してください。

ただし、一度ブックを閉じて開いたら、またA1のセルが1→0に変化したときにMacro1が実行されます。「1度だけMacro1を実行」というのが、そのファイルを開いているときだけで、いったん閉じて開きなおしたときはまたMacro1は実行される、というのであればこれでいいのですが、そうでなくて、「一度Macro1が実行されたらブックを開き直しても二度と実行されない」というのであれば、どこかのセルにMacro1実行されたかどうかの情報を隠し持つ必要があります。

この回答への補足

すいません。書き方が悪くて、1度だけというのはセルの内容が1→0になったら
1回のみマクロ実行、更に1→0になったら1回のみマクロ実行という意味でした。
ブックを開いて、A1セルが1度だけという認識を与えてしまってごめんなさい。

補足日時:2007/03/29 10:12
    • good
    • 0
この回答へのお礼

ありがとうございます。なるほど、ブックを開いたときに1度だけ実行と
いうのもいつか使用するかもしれません。大変参考になりました。

お礼日時:2007/03/29 10:19

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

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


このQ&Aを見た人がよく見るQ&A