• ベストアンサー

Excel VBAについて

Excel VBAについて ExcelのセルA1に日付データ(yyyy/mm/dd hh:mm)が入っています。 このエクセルファイルを開いている間、セルA1の日付(時分)が更新されたらマクロを実行するようにしたいのですが、どのようにしたらよいのでしょうか。 セルA1の日付データが更新されるタイミングは決まっていません。 セルA1の日付データが更新されたらマクロ実行というのが難しいのであれば、 10秒おきにマクロを実行というようなことができないでしょうか。 ご教授願います。

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

  • ベストアンサー
  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.2

更新されるA1のあるSheetのWorkSheetモジュールに, 更新が手動の場合は, Worksheet_Changeイベントで, Private Sub Worksheet_Change(ByVal Target As Range) (実行マクロ) End Sub 更新が関数やセル参照・マクロなどによるなら, Worksheet_Calculateイベントで Private Sub Worksheet_Calculate() (実行マクロ) End Sub とするが,イベントが多重に起こらないように, Application.EnableEvents = False にしたり, 実際に,更新されたのが目的のセルかなどを調べるコードを少し書かなければならないかも。

その他の回答 (2)

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

>10秒おきにマクロを実行というようなことができないでしょうか。 ひとつだけのマクロをさせるなら可能です。Timer を使います。 しかし、その起動させるマクロの内容にもよります。 >セルA1の日付データが更新されたらマクロ実行というのが難しいのであれば、 すでに回答はありますが、日付(Now関数)などが更新されるときはに、Calculate イベントが働きますので、それを、特定のセルを監視させるようにします。 たぶん、この手の質問では、DDE やOLEからのインポートでしょうから、以下のようにします。 A1;=TEXT(NOW(),"yyyy/mm/dd hh:mm") NOW関数の戻り値だけをストックするよりも、一旦、形を整えたほうがよいです。しかし、もし、そうでないなら、マクロ側で時間を分までに切り落とします。 Dim myData As Variant Private Sub Workbook_SheetCalculate(ByVal Sh As Object)  If myData = "" Or Range("A1").Value <> myData Then   MsgBox "renewal"   myData = Range("A1").Value  End If End Sub

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.1

該当するシートのマクロに Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Application.EnableEvents = False '実行したいマクロ Application.EnableEvents = True End If End Sub としてください。

関連するQ&A