- ベストアンサー
エクセルの特定のセルに入力があった場合に動くマクロ
エクセル2000です。 仮にSheets("Sheet1"),range("F5")に偶数が入力された場合、マクロA、奇数が入力された場合マクロB、(消去された場合は何もしない)というのを行うにはどのように書けばいいのでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。maruru01です。 以下のような感じでしょうか。 Dim temp As Variant temp = Sheets("Sheet1").Range("F5").Value If IsNumeric(temp) Then If temp / 2 - Int(temp / 2) = 0 Then '偶数の場合 マクロA Else '奇数の場合 マクロB End If Else 'MsgBox "数値でない!" End If
その他の回答 (3)
- maruru01
- ベストアンサー率51% (1179/2272)
No.1です。 Worksheet_Changeイベントに記述することを、最初に言ってくれればよかったですね。 対応は、No.2やNo.3の方の通りです。 あと、未入力(消去)された場合は、IsNumericでTrueになってしまうのは、こちらの勘違いでした。 これも、No.3の方の方法で。 あと、偶数・奇数の判定方法ですが、セルF5に小数が入る可能性はあるのでしょうか? その場合は、奇数のマクロを動かすのでしょうか? それとも、何もしないのでしょうか? 私の場合は、整数でも小数でも2で割り切れない場合は、奇数のマクロが動きます。 一方、No.3の方のMod演算子の場合は、整数に丸められて判定されます。 つまり、 3.9→4に丸められて、偶数 3.1→3に丸められて、奇数 になります。 Worksheet_Changeイベントに記述しているので、間違って小数を入力しても、起動しますので、対応が必要かと思います。
お礼
何度もありがとうございます。 > Worksheet_Changeイベントに記述することを、最初に言ってくれればよかったですね。 すみませんでした。 F5 に偶数が入力された場合、マクロが動くようにするにはWorksheet_Changeイベントしか知らなかったのですが、標準モジュールに書いても同様なことができるのでしょうか? ボタンなどを押してマクロをうごかすのなら知っていますが。 > セルF5に小数が入る可能性はあるのでしょうか? そういう可能性もありますね。 考えてなかったです。その場合は、メッセージを出したいです。
- papayuka
- ベストアンサー率45% (1388/3066)
こんな感じでどうでしょう? Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim r As Range For Each r In Target If Not Application.Intersect(r, Range("F5")) Is Nothing Then If IsNumeric(r.Value) And r.Value <> "" Then If r.Value Mod 2 = 0 Then MsgBox "偶数" Else MsgBox "奇数" End If End If End If Next r End Sub
お礼
ありがとうございました。 勉強になります。
- popesyu
- ベストアンサー率36% (1782/4883)
>F5以外のところに入力があった場合 Changeイベント見張ってるのだからマクロが動くのはどうしようもないので、先頭にこんなことを書いておけば良いかと。 If Target.Address <> Range("F5").Address Then Exit Sub >F5を消去してもマクロAが動 F5が消去された時とは、=チェンジイベント時にF5の値が無い時と解釈すればこうとでもかけるかな。 If Target.Value = "" Then Exit Sub こういった例外処理的な作業は一つ一つつぶしていくしかないです。
お礼
ありがとうございました。 たすかりました。
補足
ありがとうございました。残念ながらうまくいきません。 下記のようにやってみました。 Private Sub Worksheet_Change(ByVal Target As Range) Dim temp As Variant temp = Sheets("Sheet1").Range("F5").Value If IsNumeric(temp) Then If temp / 2 - Int(temp / 2) = 0 Then '偶数の場合 マクロA Else '奇数の場合 マクロB End If Else 'MsgBox "数値でない!" End If End Sub F5以外のところに入力があった場合にまでマクロが動いてしまいます。あくまでF5に入力されたときに動くようにしたいのです。また、F5を消去してもマクロAが動いてしまいます。どうすればいいのでしょうか?