Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


35321 / 76732 ←次へ | 前へ→

【46612】Re:イベント処理Change
発言  ichinose  - 07/2/8(木) 7:51 -

引用なし
パスワード
   こんばんは。

>Private Sub Worksheet_Change(ByVal Target As Range)
>  If Target.Address = "$B$4" And Target.Value <> "" Then Call AAA
>  If Target.Address = "$E$5" And Target.Value = 2 Then Call BBB
>End Sub
>
>B4に何か入れるとAAAを呼び出す
>E5に何か入れるとBBBを呼び出す
>という式をつくりました。
>しかし、
>手でA1とA2をコピーし、B1とB2に貼り付けようとすると
>Target.Addressに"$B$1:$B$2"をいれようとしてエラーになります。(型の不
>一致)
>複数のセルの値をDELETEとしようとしてもエラーになってしまいます。
>IF文とは関係ないところに手をつけたのになぜ起こったのか、わからないです
>。
ひげくまさんの回避方法でよいと思いますが・・・。
基本として、VBAの and 演算子の仕様を理解されていないと
こういうコードを書いてしまいます。

VBAの AND演算子は、

条件1 AND 条件2 とあった場合、
条件1がFalseでも 条件2の評価をしてしまいます。

言語のよっては、条件1がFalseなら、条件2は評価しない仕様になっているものも
あります。その場合は、ごろりさんのコードでも良いのですが、
VBAのANDは違うのです。
よって、Target.Value <> ""  これを評価するときにエラーが発生しています。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim crng As Range
  For Each crng In Target
    If crng.Address = "$B$4" And crng.Value <> "" Then Call AAA
    If crng.Address = "$E$5" And crng.Value = 2 Then Call BBB
    Next
End Sub


こんな方法も検討してみてください。
これだとコピーやDeleteにも対応します。
2 hits

【46581】イベント処理Change ごろり 07/2/7(水) 13:12 質問
【46582】Re:イベント処理Change ひげくま 07/2/7(水) 13:29 回答
【46583】Re:イベント処理Change ひげくま 07/2/7(水) 13:32 発言
【46612】Re:イベント処理Change ichinose 07/2/8(木) 7:51 発言

35321 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free