アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセル2000です。
仮にSheets("Sheet1"),range("F5")に偶数が入力された場合、マクロA、奇数が入力された場合マクロB、(消去された場合は何もしない)というのを行うにはどのように書けばいいのでしょうか?

A 回答 (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

この回答への補足

ありがとうございました。残念ながらうまくいきません。
下記のようにやってみました。

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が動いてしまいます。どうすればいいのでしょうか?

補足日時:2003/12/18 18:07
    • good
    • 0

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イベントに記述しているので、間違って小数を入力しても、起動しますので、対応が必要かと思います。
    • good
    • 0
この回答へのお礼

何度もありがとうございます。

> Worksheet_Changeイベントに記述することを、最初に言ってくれればよかったですね。

すみませんでした。
F5 に偶数が入力された場合、マクロが動くようにするにはWorksheet_Changeイベントしか知らなかったのですが、標準モジュールに書いても同様なことができるのでしょうか?
ボタンなどを押してマクロをうごかすのなら知っていますが。

> セルF5に小数が入る可能性はあるのでしょうか?

そういう可能性もありますね。
考えてなかったです。その場合は、メッセージを出したいです。

お礼日時:2003/12/19 13:11

こんな感じでどうでしょう?



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
    • good
    • 0
この回答へのお礼

ありがとうございました。
勉強になります。

お礼日時:2003/12/19 13:03

>F5以外のところに入力があった場合


Changeイベント見張ってるのだからマクロが動くのはどうしようもないので、先頭にこんなことを書いておけば良いかと。
If Target.Address <> Range("F5").Address Then Exit Sub

>F5を消去してもマクロAが動
F5が消去された時とは、=チェンジイベント時にF5の値が無い時と解釈すればこうとでもかけるかな。
If Target.Value = "" Then Exit Sub

こういった例外処理的な作業は一つ一つつぶしていくしかないです。
    • good
    • 0
この回答へのお礼

ありがとうございました。
たすかりました。

お礼日時:2003/12/19 13:02

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