- ベストアンサー
Excel VBAについて
Excel VBAについて ExcelのセルA1に日付データ(yyyy/mm/dd hh:mm)が入っています。 このエクセルファイルを開いている間、セルA1の日付(時分)が更新されたらマクロを実行するようにしたいのですが、どのようにしたらよいのでしょうか。 セルA1の日付データが更新されるタイミングは決まっていません。 セルA1の日付データが更新されたらマクロ実行というのが難しいのであれば、 10秒おきにマクロを実行というようなことができないでしょうか。 ご教授願います。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
更新される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)
>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)
該当するシートのマクロに Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Application.EnableEvents = False '実行したいマクロ Application.EnableEvents = True End If End Sub としてください。