• ベストアンサー

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

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

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答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

  • Changeイベントについて

    エクセル2003のPrivate Sub Worksheet_Change(ByVal Target As Range)の上で Targetの指定方法ですが 1 単一セル 2 単一セルを複数(かなり多数) 3 セル範囲 4 セル範囲を複数(かなり多数) と4種に分けて、1と3はわかりましたが、2と3がわかりません どなたかご教授ください また、セルの値が変化したときに、マクロを起動させたいのですが、入力セルごとに(入力する値が同じ場合でも)、違うマクロを起動させる場合、どのように振り分ければいいでしょうか

  • エクセル関数で検索した結果の値だけ表示したい

    エクセルのセルに値を探すvlook関数を入力していますが、そのままグラフや集計表を作ったり、移動させたりと色々編集したいので値を探した後、数式を値に変えたいのです。 =IF(ISNA(VLOOKUP(D6,**!$B:$E,4,FALSE)),"",VLOOKUP(D6,**!$B:$E,4,FALSE))のような値が見つからなかった時は空白になる数式が入っています。 値が見つかった場合、「コピー」して「形式を選択して貼付」のような「値」だけにする方法ありませんか? VBAは初心者でネットを見ながら作れる程度です。 イベントで実行するマクロなど調べてはみたのですが、値が見つかったら実行するマクロや空白でなくなったら実行するマクロなど作れたらと思っています。 詳しい方どうか教えて下さい。

  • ”戻り値”が変化したときに、マクロを実行したい

    超初心者です。 セルの値が変化したときにマクロが実行されるようなものを作りたいです。 セルに入力されているのは、”関数”です。 なので、関数の”戻り値”が変化したときにマクロを実行したいのです。 今は、戻り値が変化しても式自体が変わっていないため マクロが実行されません。 (セルの式を切り取ってもう一度貼りなおせば、マクロは実行される) ちなみに今は Private Sub Worksheet_Change(ByVal Target As Range) で書いています。 まずVBAの勉強をしろと言われてしまいそうですが><; 何卒アドバイスのほどよろしくお願いいたします!

  • エクセル イベントマクロ Changeイベントを複数作りたい

    Private Sub Worksheet_Change(ByVal Target As Range)   If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub 以下マクロの内容 End Sub これでセルA1が変わるとイベントマクロが発生しますが セルB1が変わると別のマクロが発生し セルC1が変わるとまた別のマクロが発生し…とするには どうすればよいのですか 単純に並べて書いたらだめみたいだったんですけど

  • エクセルでのマクロについての質問です

    毎日行数の違うデータの隣に数式を入力してフィルでコピーしていますが簡易のマクロを組んでみました。ですが行数が変わるためマクロ登録した時の行数までしか数式がコピーされません。 画面1のようにC1、D1セルの数式をフィルでコピーしたマクロを登録しました。画面2のようにデータが多くなるとC5、D5までしかコピーされません。最初はC1、D1だけに数式を入力してマクロ実行後、フィルでコピーしていましたが面倒な為、現在は行数を多く設定していますが無駄に数式が入るためにデーターが重くなります。マクロでB列の最下セルを検索しその列までC,Dセルをコピーというなマクロが出来るなら教えて頂きたいです。VBAの知識を必要とすると思いますがよろしくお願いします。

  • Excelでマクロを実行した後の表示について

    Excelでマクロを実行した後の表示について教えて下さい。 前回こちらで質問してほぼ希望通りの結果を得られるようになりました。 ただExcelでの表示が妙なのです。 マクロによりひとつの列のそれぞれのセルに数式が入っています。 2つ目以降は上のセルの数式をコピーしたものです。 どれもひとつずつ見て全くおかしい点はありませんでした。 ところが表示は「#NAME?」です。 数式の確認のため、セルの数式バーに一度カーソルを置いてEnterを押したら、 きちんと取り出した数字が表示されるようになります。 一番上のセルの数式は =VLOOKUP(A3,tanto.csv!A:B,2,0) でした。 セルの形式は標準になっています。 どうかよろしくお願い致します。

  • Changeイベントの途中にユーザー定義関数が入る

    Excel VBA勉強中のものです ○"A1"に数字を入力する →Worksheet_Changeイベント →"B1"~"B5"にそれぞれ結果が入る →"C1"にユーザー定義関数 =A(B5)がある みたいなことをしようとしているのですが、 やってみると、 ○"A1"に数字を入力する →Worksheet_Changeイベント →Worksheet_Changeイベントの"B1"(1つ目の結果)がでるところで →ユーザー定義関数 Function Aにとぶ →普通にEnd Function →そのまま終了(End subに行かない) となるのですが、Worksheet_Changeに戻って来ないものなのでしょうか? また、Worksheet_Changeの最初のところに Application.EnableEvents = Falseで他のイベントを発生させないように?はしているのですが、終わるまでユーザー定義関数を発生させない命令みたいなのってあるのでしょうか? 上には少なく書いてありますが、実際はたくさんのセルを使用しておりWorksheet_Changeだけだとかなりの長文になりそうで、後半はユーザー定義関数にしたのですが 根本的に考え方が間違っているのでしょうか? なにかいいアドバイスをお願いします。

  • Excelの関数またはマクロを教えて下さい。

    Exsel2000の関数で、現在以下の関数まで出来たのですが、これを応用して検索値「A1」を2つのセル「A1&B1」にしたいのですが、どうすればよいのでしょうか?どなたか方法を教えて下さい。 =VLOOKUP(A1,Sheet1!$A$1:$E$2000,4) 上記の関数から判るように、これは 例えばSheet2のC1のセルにこの式を入れる場合、A1と同じ内容の値を、Sheet1のA列から検索して、そして同じ行のSheet1のD列の値をSheet2のC1のセルに返すという関数です。 これを応用して、「A1と同じ内容…のA1を、A1&B1の2つが一致するセルを検索して、同じ列のSheet1のD列の値をSheet2のC1のセルに返すという関数にしたいのです。 どなたかおわかりになる方がおりました宜しくお願いいたします。 また、マクロを使う方法でも良いのですが、当方マクロは詳しくないので出来るだけ判りやすくお願いいたします。

  • セルの値変更でマクロ実行

    セルに値を入力すると、他のシートで演算され結果がセル"A1"にTRUE、FALSEと表示される関数式ができています。 セル"A1"の変化によりマクロ実行させたいと思います。プログラムの案をお願いします。

  • エクセルVBAに関して

    VBAの知識があまりないので教えて頂きたいのですが、セルの内容が変更されたら マクロが実行される Private Sub Worksheet_Change(ByVal Target As Range) というのがあるかと思います。 セルに書かれた関数によって、セルの内容が変化したときにマクロが実行されるVBA関数はあるのでしょうか?

このQ&Aのポイント
  • QL-800のドライバーをインストール中に「対応製品が見つかりません」というエラーメッセージが表示され、インストールが完了できない状況です。
  • ラベルプリンターとPCの間にUSB変換ハブを挟んでおり、PC側にUSBポートがないため、ドライバーのインストールができません。
  • お使いの環境はMac OS 12で、接続方法はUSBケーブルです。関連するソフトは「Start Here Mac.app」です。電話回線はひかり回線です。
回答を見る

専門家に質問してみよう