VBAに関する質問です。現在時刻から、ファイルのタイムスタンプを引いた経過時間を、

Now - FileDateTime(currentFile) の形で取得しています。この経過時間を使って、表示と、条件判断したいのです。表示は、何日何時間何分経過していますと表示です。次に、何分以上経過したらという条件判断ができるようにして必要があれば警告を出すようにしたいのです。
後者の経過時間による条件判断は、上記の経過時間を、整数の分単位に変換できればこれはできるような気がします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/11/15 11:48:09
  • 終了:2007/11/15 14:51:18

ベストアンサー

id:K_SUKE No.2

K_SUKE回答回数73ベストアンサー獲得回数52007/11/15 13:34:58

ポイント35pt
Private Sub Workbook_Open()
    
    ThisWorkbook.Sheets(1).Range("A1") = Format(Now - FileDateTime(currentFile), "hh:mm:ss")

  Dim d As Integer  '経過時間(単位:日数)  
    Dim h As Integer  '経過時間(単位:h)
    Dim m As Integer  '経過時間(単位:m)

    d = Day(Now - FileDateTime(currentFile))
    h = Hour(Now - FileDateTime(currentFile))
    m = Minute(Now - FileDateTime(currentFile))


    Debug.Print m + (h * 60) + (d * 24 * 60)

End Sub

上記はbookオープン時に一番目のシートA1セルに現在時刻から、

ファイルのタイムスタンプを引いた経過時間を表示させます。

何分以上経過したらという条件判断ができるようにということ

ですので

m + (h * 60) + (d * 24 * 60)

を使用すれば比較できると思います。

また、月単位も考慮したい場合は上記と同様に

Month関数を利用すれば大丈夫だと思います。

http://msdn2.microsoft.com/ja-jp/library/s70thwaz(VS.80).aspx

id:isogaya

おっともっと簡単にできるんですね。

2007/11/15 14:49:25

その他の回答(1件)

id:SALINGER No.1

SALINGER回答回数3454ベストアンサー獲得回数9692007/11/15 13:17:53

ポイント35pt

A1にファイルのパスを入れて、B1に経過時間を表示するマクロです。

1分以上のファイルの場合はメッセージボックスがでます。

Sub Macro()
    time1 = FileDateTime(Range("A1").Value)
    time2 = Now
    Range("B1").Value = DateDiff("d", time1, time2) & "日" & Hour(time2 - time1) & "時間" & Minute(time2 - time1) & "分" & Second(time2 - time1) & "秒経過しています"
    If DateDiff("n", time1, time2) > 1 Then
        MsgBox "1分以上経過しています"
    End If
End Sub

http://www.geocities.jp/cbc_vbnet/function/date.html

id:K_SUKE No.2

K_SUKE回答回数73ベストアンサー獲得回数52007/11/15 13:34:58ここでベストアンサー

ポイント35pt
Private Sub Workbook_Open()
    
    ThisWorkbook.Sheets(1).Range("A1") = Format(Now - FileDateTime(currentFile), "hh:mm:ss")

  Dim d As Integer  '経過時間(単位:日数)  
    Dim h As Integer  '経過時間(単位:h)
    Dim m As Integer  '経過時間(単位:m)

    d = Day(Now - FileDateTime(currentFile))
    h = Hour(Now - FileDateTime(currentFile))
    m = Minute(Now - FileDateTime(currentFile))


    Debug.Print m + (h * 60) + (d * 24 * 60)

End Sub

上記はbookオープン時に一番目のシートA1セルに現在時刻から、

ファイルのタイムスタンプを引いた経過時間を表示させます。

何分以上経過したらという条件判断ができるようにということ

ですので

m + (h * 60) + (d * 24 * 60)

を使用すれば比較できると思います。

また、月単位も考慮したい場合は上記と同様に

Month関数を利用すれば大丈夫だと思います。

http://msdn2.microsoft.com/ja-jp/library/s70thwaz(VS.80).aspx

id:isogaya

おっともっと簡単にできるんですね。

2007/11/15 14:49:25
  • id:SALINGER
    K_SUKEさんの回答にはちょっと間違いがありまして。
    Day(Now - FileDateTime(currentFile))
    を使って日数を取得してるのですが、これは日数ではなくて日付を取得する関数です。
    シリアル値は1900年1月1日午前0時を1とする数です。
    作って24時間経っていないファイルだとちなみに、d=30となってしまいます。
    シリアル値は日や月や年の場合は0から始まるわけではないので、シリアル値の差としてDay()は使えないのです。
    ちなみに私の環境ではオーバーフローしました。
  • id:isogaya
    おっとそうなんですね。簡単だから、ついイルカをだしてしまいました。
  • id:K_SUKE
    あらら、そうなんですか。私も知らなかったです。
    すみませんでした。
    SALINGERさんの回答の方法で実装されるのが
    良いかと思います。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません