• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excelで参照のセル値の変化でVBAを実行する)

Excelで参照のセル値の変化でVBAを実行する方法

このQ&Aのポイント
  • Excelで別シートの値を参照しているセル値の変化でVBA実行イベントを起こす方法について調べました。Sheet3を作業シートにして、Sheet1のA1を参照にしてCalculate(シートが再計算された時に発生)イベントで実行する方法がありますが、他にもスマートな方法があるか気になります。
  • Excelで参照のセル値が変化した時にVBAを実行する方法について知りたいです。例えば、Sheet1のA1がSheet2のA1の最初の4文字を参照している場合、Sheet1のA1の参照結果が変化すればVBAが実行されるようにしたいです。Sheet3を作業シートにして、Sheet1のA1を参照にしてCalculateイベントで実行する方法を見つけましたが、他にも良い方法があるか教えていただきたいです。
  • Excelで別シートの値を参照しているセル値の変化でVBAを実行する方法を知りたいです。Sheet1のA1がSheet2のA1の最初の4文字を参照している場合、Sheet1のA1の参照結果が変化すればVBAが実行されるようにしたいです。Sheet3を作業シートにして、Sheet1のA1を参照にしてCalculateイベントで実行する方法を見つけましたが、他にもスマートな方法があるか教えていただきたいです。

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

  • ベストアンサー
  • FEX2053
  • ベストアンサー率37% (7991/21373)
回答No.1

発想だけ。 別に=LEFT()の結果がどうこうしたときに動く、と考えずに、Sheet2の 中身が変化したときに動く WorkSheet_Changeでコードを書いて 1.コードの最後に、Left(A1,4)の内容をPublic変数で保持しておく 2.コードの最初で、保持したPublic変数とLeft(A1,4)を比較する 3.比較した結果同じならExit Subで処理を終わり、違っていれば  処理を継続する 4.起動時に問題ないよう、Public変数には適当な初期値を与えておく こんな感じで大丈夫なんじゃ? 要は「ワークシートの内容が変わったら起動、ただし、指定した部分 の内容が変わってないなら、処理せず終了」って考え方です。結構 こういう発想って使えますよ。

Excel401
質問者

お礼

なるほど。その発想はなかったです。勉強になります。

その他の回答 (2)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.3

>Sheet1のA1の参照結果が変化すればVBAが実行される >Sheet1のA1の中は『=LEFT(Sheet2!A1,4)』です。 冷静に分析すれば、それは「シート2でA1セルを編集した時」にイベントをトリガしたいという意味です。 シート2: private sub Worksheet_Change(byval Target as excel.range) if application.intersect(target, range("A1")) is nothing then exit sub worksheets("Sheet1").range("C1") = "Sheet2!A1 changed" end sub 御相談でも書かれている通り、calculateイベントでは「このセルが」計算されたという分析はできません。

Excel401
質問者

お礼

丁寧な回答ありがとうございました

  • Brennan
  • ベストアンサー率82% (28/34)
回答No.2

セルの値が変更されたときに発生するイベントなら、ブックレベルではSheet_changeイベントですが、ご質問の場合はシートごとに別々に判断するでしょうからシートレベルでChangeイベントとして作成した方がいいと思います。 セルA1が変更されたときにイベントを発生させますが、コピー&ペーストなどにも対処する場合はIntersectメソッドを使います。 Private Sub Worksheet_Change(ByVal Target As Excel.Range)    ……'変数の宣言など    If Not Intersect(target,Range("A1")) Is Nothing Then    ……'イベントの発生が認められた時の処理 End Sub 

Excel401
質問者

お礼

Intersectメソッド勉強になりました。ありがとうございます。

関連するQ&A

専門家に質問してみよう