• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excelのマクロで質問です)

Excelマクロでセルに関数の値が入った時にマクロを実行する方法

このQ&Aのポイント
  • Excelマクロを使用して、セルに関数の値が入った時にマクロを実行する方法について教えてください。
  • 特定の範囲のセルに「NG」と表示された場合にメッセージを表示したいですが、関数がセルに入力されているためにマクロが実行されません。
  • 関数をマクロに組み込むか、他の方法でマクロが実行できるようにする方法を教えてください。また、関数とマクロの併用時に注意すべき点についても教えてください。

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

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

Worksheet_Changeイベントは、セルが「編集された時」に編集されたセルをトリガとして起動します。 (C列の)関数の計算結果が変わっても、それ自体は「C列のセルの編集」ではないので、C9からのセルはイベントをトリガしません。 でも >あらかじめ、関数で >=IF(M9="","",IF(Q9<M9,"OK","NG")) >というような式がそれぞれのC9、C10、C11・・・・セルに入ってしまっています。 : >補足でQ9セルには >=IF(I9="","",I9+"07:01")のような関数が >入力されています。 Q列がそうならM列はどうなんでしょうね。 いずれにしてもC列の関数は、具体的に「I列(あるいはM列)のセルが編集された時に再計算」されます。 ならばNGあるいはOK(あるいは空白)の計算結果がC列に現れるのは、まさにそれらのI9:I19(もしかするとM9:M19)のセルが「編集された」時です。 private sub Worksheet_Change(byval Target as excel.range)  dim h as range  if application.intersect(target, range("I9:I19,M9:M19")) is nothing then exit sub  for each h in application.intersect(target.entirerow, range("C:C"))   if h.value = "NG" then msgbox "NG"  next end sub #補足 この手の多くのご相談は、「セルが一個ずつしか編集されない」ことを暗黙の前提に置いているようです。 でも実際には、I列等の「複数のセル範囲をまとめて編集する(たとえばDeleteキーを押す、オートフィルドラッグする、コピー貼り付ける)」事が行われます。 自動起動マクロは、そういった起こり得ることに対しても適切に対応できるよう、仕込んでおかなければいけません。

yyrd0421
質問者

お礼

ありがとうごさいました。 目的の事が果たせました! 補足でアドバイスまで頂きありがとうございます。 また何かあったらよろしくお願いします。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • dogs_cats
  • ベストアンサー率38% (278/717)
回答No.2

補足下さい。 どこのデータが手動で変化するのでしょうか? Worksheet_Change(ByVal Target As Range)なのでユーザーが指定セル範囲内の数値やテキストを入力変更させる事を前提としていますよね。 M9やI9が手動が手動で入力があるのであれば、その値が変動した時に OK、NGの判断式をVBAで判断すれば良いわけです。 仮にM9~M19、I9~I19の値が手動変動するとしたら下記方法で良いかと思います。 M列とI列をUNIONで集合させています。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Union(Range("M9:M19"), Range("I9:I19"))) Is Nothing Then Exit Sub If Range("M" & Target.Row) <= Range("Q" & Target.Row) Then MsgBox "NGです" End If End Sub

yyrd0421
質問者

お礼

ありがとうごさいました。 頂いたマクロで目的の事が果たせました。 こういう書き方もあるんですね! 勉強になりました。

すると、全ての回答が全文表示されます。