• ベストアンサー

エクセルマクロのChangeイベント

以前Changeイベントをこちらで教えて頂いたのですが、うまく使えず困っています。 Changeイベントの対象となるセルには値を検索するvlookup関数の数式が入力されていて、値が検索できたらコピーするというマクロをChangeイベントで実行しようとしているのですが、うまくいきません。 Changeイベントはセルの中の数式が変化しないと実行されないのでしょうか?数式の結果が変わっただけでは実行しませんか?教えて下さい。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

>Changeイベントの対象となるセルには セル範囲を限定は出来ますが、(思っている範囲の範囲外のセルだと起こったイベントを使わないことは出来る) (1)特定のイベントモジュールを入れた1つのシートのどこでも全セル (2)またはどのシートのどのセルでも Private Sub Workbook_SheetChange(ByVal Sh A・・の場合 の変化のときに発動されるはずです。 (1)の場合、他シートのセルの値をVLOOKUP関数で(第1引数の限ると思うが)使っている場合はそちらが変わっても反応しないでしょう。 >Changeイベントはセルの中の数式が変化しないと実行されないのでしょうか 数式が変化するという表現はおかしいと思う。数は当然として 式を変化させるとはどういう場合か疑問。 変化反応のパターンを調べると ーー直接キーボードでセルへ値入力 当然反応 ---関数間接的・値変化 Sheet1のイベントに Private Sub Worksheet_Change(ByVal Target As Range) MsgBox "Change" End Sub を入れておく。 ーー Sheet1に=Sheet2!A10 と入れる。式を入れたことで反応はする。 参照セルの値を変化させると Sheet2のA10を23に入力する。 上記メッセージは反応しない。 ーーVBAで 標準モジュールに Sub test02() Worksheets("Sheet1").Range("A11") = 12 End Sub これを実行。するとMsgboxで"Change"と出る。 ーーーコピー張り付け コピー張り付けもMsgboxで"Change"と出る。 式の複写も同じ。 ーーーDELETEキー DeLETEキーも出る。 ーーー式入力=>値も変わるといえるが。 式をセルに入れても反応する。 ーー書式変化 当然ですが、書式を変えても反応しない。 質問を考える場合、以上のどれか参考になれば。

noname#113614
質問者

お礼

>数式が変化するという表現はおかしいと思う。 ご指摘ありがとうございます。解りづらい表現で申し訳ありません。私が言いたかったのは、数式の結果の値だけが変化して、数式自体がそのままならChangeイベントは実行されないかということでした。 変化反応のパターンを沢山教えて頂いて、とても参考になります。この中では関数間接的・値変化にあたるようです。結果、実行されないということですね。他の方法を考えてみます。ありがとうございました。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 >Changeイベントはセルの中の数式が変化しないと実行されないのでしょうか?数式の結果が変わっただけでは実行しませんか?教えて下さい。 それは可能だけれども、それは、あまり一般的な内容ではありませんね。 前のコードを追求すればよかったのかもしれませんが、仕方がなかったかもしれませんね。ただ、一応、自分の思惑とは違ったら、主張はしたほうがよいと思います。質問とコードの内容が違うかもしれませんからね。 単にこういうことだと思います。 D6 が、値を代入するセル 仮に B1に、こんなVLOOKUP の数式があるとします。 =IF(COUNTIF(SheetX!B:B,D6)=0,"",VLOOKUP(D6,SheetX!B:E,4, FALSE)) Sheet2のA1に、値をコピーする。 そうしたら、こんなマクロになるはずだったと思います。 ------------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$D$6" Then Exit Sub  If Range("B1").Value <> "" Then   Worksheets("Sheet2").Range("A1").Value = Range("B1").Value  End If End Sub

noname#113614
質問者

お礼

ご回答ありがとうございます。 >前のコードを追求すればよかった 少し私には難しい内容で、あまり理解できませんでした、すみません。。ありがとうございました。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

> 数式の結果が変わっただけでは実行しませんか? はい、Changeイベントはあくまでセルの入力内容がかわらないと実行されません。 しかし、vlookup関数を働かすのですから、何か検索値を入力するのですよね?だったらその検索値を入力するセルをChangeイベントの対象に指定すればいいのではないですか?

noname#113614
質問者

お礼

ご回答ありがとうございます。やはり実行されないのですね。検索値はもともと入力されていて、リンクの更新をして値が変化した時だけ実行できるようにと考えたので難しくなってしまいました。他の方法を考えてみます。ありがとうございました。

関連するQ&A