• ベストアンサー

EXCELでセルの値が変化したときだけにマクロ実行

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

質問者が選んだベストアンサー

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

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になったときには処理をしない」などの可能性が読み取れます。 その場合ワークシートのどこかに前回値や処理を実行したことを示すフラグを書いておけば対応はできますので、ご自身で試してみてください

koro_koro_koro
質問者

お礼

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

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.2

「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実行されたかどうかの情報を隠し持つ必要があります。

koro_koro_koro
質問者

お礼

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

koro_koro_koro
質問者

補足

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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • EXCELでセルの値が変化したときだけにマクロ実行

    教えてください。 EXCELのA1セルの値が1→0に変化したときにMacro1を実行、0→1に変化したときにMacro2を実行したいと思い、以下のマクロを「シート名タブ右クリック」→「コードの表示」で開く画面に打ちました。 そうしたところキーボードからA1セルに1や0を打ち込むとMacro1・Macro2を実行するのですが。A1セルに関数式を入れ自動で1→0・0→1に変化してもMacro1・Macro2が実行されません。この場合どう修正すればMacroが実行されるようになりますか? ※ちなみにA1セルの関数式はある条件を満たしたら1、そうでない時0という式です。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" And Target.Value = 0 Then Macro1 End If If Target.Address = "$A$1" And Target.Value = 1 Then Macro2 End If End Sub

  • セルの値変更でマクロ実行

    セルに値を入力すると、他のシートで演算され結果がセル"A1"にTRUE、FALSEと表示される関数式ができています。 セル"A1"の変化によりマクロ実行させたいと思います。プログラムの案をお願いします。

  • Excelで、「特定のセルの値が変わったらマクロを実行する」という設定はできないでしょうか。

    タイトルの通りです。 Excelで、「特定のセルの値が変わったらマクロを実行する」という設定はできないでしょうか。 ご存知の方がいらっしゃいましたら教えて下さい。

  • エクセルでセルの値が変更されたらマクロを実行

    エクセルで、セルの値が変更されたらマクロを実行したいと考えています。 具体的には、A1のセルに何か値が入力されるか、変更されたら、 作成したマクロを実行したいと考えています。 どうしたらいいのでしょうか。 ご教授ください。 よろしくお願いします。

  • IF関数を使ってマクロを実行させるには?

    Excel2002のユーザーです。 実行させたいマクロを Macro1、Macro2 とします。 セルA1の値を参照して実行させたいマクロを選択するために =IF(A1=1,Macro1(),Macro2()) というようなことをやってみたのですがうまくいきません。 このようにIF関数を使ってマクロを実行させるにはどのような記述をすればよいのでしょうか。 凄く簡単なことかもしれませんが、ご教授をよろしくお願い致します。

  • EXCELで”+100"を実行するマクロ

    EXCELで、マクロを実行するたびに、そのセルに入っている数に100プラスされるマクロを作りたいのです。 意味がよく分からないかもしれませんが、 例えば、あるセルに"100"という数値が入っていて、 1回実行すれば100+100で"200"に、もう1度実行すると、200+100で"300"に。…という感じです。 私的に考えたのは、 別のセルに"そのセル+100"をする式を書き込み、 コピー&元のセルに値貼り付けをし、 式の入った別のセルをDELする… というのをマクロにしてみたのですが、 イマイチうまくないというか… よい方法があったら、アドバイスください。

  • セルの結果でマクロ実行

    題名の通りですが、 セルの結果によって、それぞれ違うマクロを実行する事が出来ますでしょうか? =if(A1=a,macro1,if(A1=b,macro2,if(A1=c,macro3,false)))のようなイメージなのですが。。。 解りにくければ、補足させて頂きますので宜しくご教授ください。御願い致します。

  • 【EXCEL】セルの値の変化をトリガーにしてマクロを自動実行したい

    お世話になります。困っておりまして、もしよろしければ、ご助言いただけませんでしょうか? 【質問】 EXCELでVBA等を使って下記のことは実行可能でしょうか? (下記の1~3の方法はわかっていますが、知りたいのは4の部分です。) 0.(前提として)エクセルはOpenされた状態。 1.特定のセルの値は外部参照で一定時間毎に変化している。 2.そのセルの値を使って別のセルで数式計算 3.計算結果がIF条件に合致するかどうか判断 4.3の条件に合致したら、自動で登録済みのマクロ を実行する。 (なお、ExcelのXPでできれば望ましいですが、それ以外のバージョンでできるようでしたら、それでもかまいません。) よろしくお願いいたします。

  • ”戻り値”が変化したときに、マクロを実行したい

    超初心者です。 セルの値が変化したときにマクロが実行されるようなものを作りたいです。 セルに入力されているのは、”関数”です。 なので、関数の”戻り値”が変化したときにマクロを実行したいのです。 今は、戻り値が変化しても式自体が変わっていないため マクロが実行されません。 (セルの式を切り取ってもう一度貼りなおせば、マクロは実行される) ちなみに今は Private Sub Worksheet_Change(ByVal Target As Range) で書いています。 まずVBAの勉強をしろと言われてしまいそうですが><; 何卒アドバイスのほどよろしくお願いいたします!

  • コンボボックスの値に応じてブック内クロを実行したい

    マクロ初心者です。 シート1にコンボボックスを用意しています。 コンボボックスの入力範囲で指定している値が複数の年月 (例2022/11,2022/12…) リンクするセルがA1としました。 A1に表示されている値は、1です。 標準モジュールに、Macro1、Macro2、Macro3…と作りました。 セルA1値が2022/11の場合はMacro1を実行、 2022/12の場合はMacro2を実行する場合のマクロを教えてください。 よろしくお願いいたします。

専門家に質問してみよう