• ベストアンサー

Excel VBAについて

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

  • gazo
  • お礼率30% (74/241)

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

  • ベストアンサー
  • 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

  • エクセルVBAでシリアル値で読み込まれてしまう

    こんばんわ! エクセルVBAのユーザーフォームの質問です。 A1セルにある日付データ(yyyy/mm/dd形式)のデータをユーザーフォームのテキストボックスに入れるとシリアル値になってしまいます。 式は普通に aaa.text=range("a1") としています。 同様に時刻もなってしまうのですが、どうしたら通常のyyyy/mm/dd形式(時刻はhh:mm形式)で表示できるでしょうか? アドバイスの程よろしくお願いいたします。

  • EXCEL VBAでのCSV出力について

    EXCELに入力されたデータをCSV出力するプログラムを作成しました。データには日付が入っており年月日がYYYY/MM/DDの形で入力されています。これをハンド作業で名前をつけて保存でCSVに出力すると年月日はそのままの状態で保存されますが、VBAで保存するとMM/DD/YYYYの形になってしまいます。この状態で保存されると、次にEXCELで読み出すと年月日が文字列扱いになってしまいます。新しいマクロの記録で行っても結果は同じでした。 VBAで保存する際、YYYY/MM/DDで保存する方法はないでしょうか。 また、MM/DD/YYYYで保存されたCSVを日付としてEXCELに認識させる方法はあるでしょうか。 教えてください。よろしくお願いします。

  • エクセルで日付、時間表示

    お世話になります。エクセル2000を使っています。 セルの書式設定-ユーザー定義で以下の条件で表示させたいのですが・・・・ 日付データとして、日付のみのものと、時間も入っているデータを、 日付のみのものは日付のみの表示に、 時間も入っているものは日付と時間を表示する。 具体的には、ある一つのセルに 2003/07/26と入力した時 → "2003/07/26"と表示 2003/07/26 18:30と入力した時 →  "2003/07/26 18:30"と表示 ユーザー定義で、 yyyy/mm/dd yyyy/mm/dd hh:mm でそれぞれの表示はできますが、例えば 時間データのないものに、yyyy/mm/dd hh:mmと定義すると、"2003/07/26 00:00"と表示されて都合がよくありません。 文字データとして、前に「’」を付ければ表示のみはできますが、数値データとして使えません。 少し長くなりましたが、よろしくご教示ください。

  • エクセルVBA:日付データの変換がうまくいかない2

    http://okwave.jp/qa/q7615238.html の続きです。 問題内容が変わってしまったので、改めて質問させていただきます。 困っているところは、日付のセルのデータ表示をyyyy/mm/ddに固定したいのですがうまくいきません。 前回返信頂いた内容を参考に頑張ってみたのですが、以下のような現象に陥りました。 (1)1回VBAプログラムを通すと、CSVファイルにyyyy/mm/ddの日付データが書き込まれる。 (2)【その後、csvファイルを閉じて、もう一度csvファイルを開くと、mm/dd/yyyyの形式に戻っている。】 (2)の現象がなぜ起きるのかわかりません。MSの仕様なのでしょうか? どうしようもないのでしょうか?

  • 2つの時刻間の時間を計算したい。

    よろしくお願いします。 エクセル2010、OSはWindows7です。 例) セルA1 に時刻その1 セルB1 に時刻その2 というデータが入力されています。 時刻は、YYYY/MM/DD hh:mm の形式で入力されており、2つの時刻の差は24時間以上なので日付は異なります。 この2つのセルの時間差をhh:mmの形式で表したいですが、単純に引き算しただけでは思うようにいかないようです。 やり方を教えてください。

  • VBA:日付をシリアル値にできるの関数教えてください。

    VBAにより、あるセルに"yyyy / mm / dd hh:mm:ss"のフォーマットで日付を記入しました。それを手動で書式を標準にすると例えばシリアル値38148.4768981481になります。これをVBA上でできる関数を知りたいです。つまり、日付をシリアル値にできるVBAの関数を教えて頂きたいです。宜しくお願いいたします。

  • yyyy/mm/ddの日付に一括変換するマクロ

    [セルの書式設定] の [表示形式]が標準(日付ではない)で単なる文字列となっている「mm-dd-yyyy」や「mm/dd/yyyy」のデータをマクロで「yyyy/mm/dd」の日付データに一括変換するマクロを教えてください。 たとえば、日付データが列Aにある場合にはDATE関数で、 =DATE(RIGHT(A2,4),LEFT(A2,2),MID(A2,4,2)) でも変換可能ですが、対象ファイルが多数、各ファイルにも対象の列が多数、そしてファイルの更新頻度も多いため、DATE関数を使用することは現実的ではない事情があります。 このためマクロを使用して処理させたいです。 添付のサンプルの例で一括変更するマクロを教えてください。 なお、Excelは2007を使用しています。

  • Excel vba 日付の形式判定

    Excelに日付、開始時間の列があります。 セルの形式をチェックしたいのですが、形式が下記のとおりであるか どう記述すればいいのでしょうか? 日付チェックはisdate関数を使いますが、日付の形式がyyyy/mm/dd、時間の形式がhh:mmであるかの 判定方法を教えてほしいです。 例) 日付    時間  2021/05/01 10:00  H33/05/01   ← yyyy/mm/dd形式でない為、NG   10時00分 ← hh:mm形式でない為、NG 

  • エクセルでランダム表示したい

    エクセルのセルA1からセルA20までとか「MM/DD/YYYY hh:mm:ss」の形式でランダム表示させる関数なんてあるでしょうか? できれば、3月1日~5月31までとか期限を制限してランダムに表示できたらうれしいです。

  • Excel VBAで教えてください。

    Excel VBAで教えてください。 テキストデータをExcelで読み込んだ後、Sheet1に以下のデータが入っており、 A列 B列   C列 氏名 開始日(yyyy/mm/dd) 終了(yyyy/mm/dd) テキストボックスに開始日(yyyy/mm/dd)、終了日(yyyy/mm/dd)、を入力し、入力した開始日から終了日のデータ検索し、A列からのデータをコピーし、Sheet2に貼り付けしたい。 テキストデータをExcelで読み込むコードはできたのですが、その後の処理ができずに困っています。 ユーザーフォームに入力するコードも教えてください。

専門家に質問してみよう