[[20211012162109]] 『Targetが2つある場合』(初心者) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『Targetが2つある場合』(初心者)

お願いします。

今、自力でVBAを勉強しているのですがネットで
調べながらするのが限界にきています。

2つのセルがあり、どちらかのセルの値が変わったら
VBAを起動させたいです。

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = ("$P$2") Then

・   (コード)

End If
End Sub

と作成したのですが
("$N$2")を変更させた時も同じコードを実行させたいです。

やってみたことは
If Target.Address = ("$P$2") Or ("$N$2") Then

単純にやってもエラーがでました。

どなたかよろしくお願いします

< 使用 Excel:unknown、使用 OS:unknown >


 If Target.Address(False, False) = "P2" Or Target.Address(False, False) = "$N$2" Then
(tkit) 2021/10/12(火) 16:32

 修正します。
 If Target.Address(False, False) = "P2" Or Target.Address(False, False) = "N2" Then

 If文は判定式がTrueかFalseかで判定します。
 Target.Address = ("$P$2") Or ("$N$2") では式になっていません。

(tkit) 2021/10/12(火) 16:36


tkitさんありがとうございます。

無事、思っている動きができました。

早々の対応ありがとうございました。
(初心者) 2021/10/12(火) 16:39


 比較演算子の = と 論理演算子の Or をつかっていますが、
 = も Or も二項演算子です。
 そして優先順位は、 比較演算子 > 論理演算子 です。
 https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/operator-precedence

 If Target.Address = "$P$2" Or "$N$2" Then は
 If ( Target.Address = "$P$2" ) Or "$N$2" Then です
 
 その結果、
  Target.Address = "$P$2" のとき
 If True Or "$N$2" Then となり
  Target.Address <> "$P$2" のとき
 If True Or "$N$2" Then となります。
 
 先に書いたとおり、Or 演算子は二項演算子で、前後の項は論理値である必要がありますが、
  後の項が文字列のためエラーになります。
(´・ω・`) 2021/10/12(火) 16:39

 こんなのも
 If Intersect(Target, Range("N2,P2")) Is Nothing Then Exit Sub
 TargetがN2セル、P2セルの時の処理

(ねむねむ) 2021/10/12(火) 16:41


Or案とIntersect案がでてますが、
両者は微妙に動作が異なるので注意が必要です。

Or案は1セルのみ更新された時に発動
Intersect案はそれに加えて複数セルを選択してDELしたり、複数セルをコピー貼り付けしたときなども発動します。

どちらが、要件にあうのかよくよく検討して採用するといいでしょう。
(hatena) 2021/10/12(火) 19:59


 >Intersect案はそれに加えて複数セルを選択してDELしたり、複数セルをコピー貼り付けしたときなども発動します。
 おっとそれがあったか
 もし、複数セルにも対応であればその後の処理でTargetを使っては出来ないだろうこともあるので
 Dim WK_RANGE  AS Range
 とレンジオブジェクト変数を用意して
 For Each WK_RANGE In Intersect(Target, Range("N2,P2"))
    WK_RANGEに対する処理
 Next
 としてみてくれ。
(ねむねむ) 2021/10/13(水) 09:13

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.