• ベストアンサー

今日より何日経過しているかを取得するには?

Sub Macro() Dim dtm日付 As Date dtm日付 = #1/1/2015# If dtm日付 Then MsgBox "何日前です" End If End Sub のように、dtm日付が今日より何日前かを取得する方法はありますか?

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.6

質問には、エクセル(VBA)の問題かをはっきり書くこと。ものによってはバージョンなどもね。 ちなみに日付の表現はアクセスの場合実質似ているが少し違う面があるようだ。 エクセルであれば、エクセルの日付は日付シリアル値(整数(部分))というもので、セルの値や変数に代入した値は、日付シリアル値扱われていることを知らないのかな。小数部分で時刻を表している。 これを知っていれば、質問に値しない場合もある。 ーー 下記をやってみて、下記のように算出した日数でよければ、引き算すれば済むだけの簡単なこと。 標準モジュールに Sub test01() x = Date MsgBox x y = #3/20/2015# MsgBox x - y End Sub x - Ýはx - y+Iでよい場合もあろう。 時間も含めて考える必要(24時間たつと1日とか、何時を過ぎると+1日とかのような)がある場合などは、別になる。 質問に、正しいかどうか不明なVBAのコードを載せるのも良いが、日本語で、質問には例でも挙げて質問するべきだ。本来読者側で、こういう疑問もでそうだ、と先回りできるだけの想像力が出きてこそ、VBAを勉強するレベルだと思う。 VBAをやるというレベルなら、日付シリアル値というものは当然知っているべきことと思う。

noscilbgqrjod
質問者

お礼

ありがとうございました。

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

その他の回答 (5)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.5

 MsgBoxを表示するのは共通の処理なのですから、ケースごとにMsgBoxを表示させるのではなく、MsgBoxで表示する文面を格納するためのString変数の値をケースごとに変える様にした上で、最後にMsgBoxを表示させる様にした方が良いと思います。 Sub QNo8944208() Dim dtm日付 As Date Dim Msginfo, myinfo(4) As String 'Msginfo:MsgBoxに表示する文面 'myinfo:MsgBoxに表示する文面の候補 Dim RemainD As Long '残りの日数 myinfo(0) = "一昨日" myinfo(1) = "昨日" myinfo(2) = "今日" myinfo(3) = "明日" myinfo(4) = "明後日" dtm日付 = #1/1/2015# RemainD = dtm日付 - Date Select Case RemainD Case Is > 2 Msginfo = "は" & Chr(13) & " " & RemainD & "日後です" Case -2 To 2 Msginfo = "は" & Chr(13) & " " & myinfo(RemainD + 2) & "です!!" Case Is < -2 Msginfo = "から" & Chr(13) & " " & -RemainD & "日が経過しました" End Select MsgBox dtm日付 & Msginfo End Sub

noscilbgqrjod
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。
  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.4

こういうのではダメですか? Function 日数差1(ByRef 日付古 As Date ,ByRef  日付新 As Date) As Date  日数差1 = ABS(日付新 - 日付古) End Function Function 日数差2(ByRef 日付古 As Date ,ByRef  日付新 As Date) As Date Dim  Temp As Date Const 日 = "D"  If 日付新 < 日付古 _  Then   Temp = 日付新   日付新 = 日付古   日付古 = Temp  End If  日数差2 = Evaluate("Datedif("日付古","日付新","日")") End Function Function Dvalue(ByVal 日付テキスト As Stling) As Date  Dvalue = Evaluate("Datevalue("日付テキスト") End Function Function 今日() As Date  今日 = Evaluate("Today()") End Function Sub 呼び出し例()  MsgBox Call 日数差1(Dvalue("2015/1/1"),今日())  MsgBox Call 日数差2(Dvalue("2015/1/1"),今日()) End Sub

noscilbgqrjod
質問者

お礼

ありがとうございました。

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

すみません、直接的な回答が抜けてしまいました。 Sub Re8944208a() Dim dtm日付 As Date   dtm日付 = #4/1/2015#   If dtm日付 - Date > 0 Then     MsgBox dtm日付 - Date & " 日前です"   End If End Sub

noscilbgqrjod
質問者

お礼

ありがとうございました。

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

こんにちは。 今日の日付はDate関数です。 日付と日付の差を求めるなら普通に引き算でも出来ます。 DateDiff関数を使うことも多いです。 差を求めたら、一旦、変数に格納しておいて、その変数を 条件判別と、MsgBoxで表示する日数と、2か所で使います。 Sub Re8944208() Dim dtm日付 As Date   dtm日付 = #4/1/2015# '  dtm日付 = #1/1/2015# '  dtm日付 = #3/28/2015# '  dtm日付 = #1/1/2016# Dim dtDiff As Long   dtDiff = DateDiff("d", Date, dtm日付) '  dtDiff = dtm日付 - Date      Select Case dtDiff   Case 0     MsgBox dtm日付 & "  今日です!!!"   Case 1     MsgBox dtm日付 & "  明日です!!"   Case Is < 0     MsgBox dtm日付 & " から " & -dtDiff & " 日が過ぎました"   Case Else     MsgBox dtm日付 & " まで あと " & dtDiff & " 日です"   End Select End Sub

noscilbgqrjod
質問者

お礼

ありがとうございました。

すると、全ての回答が全文表示されます。
noname#206834
noname#206834
回答No.1

エクセルですか? 例えば2001/01/01のセルと2005/05/05のセルを作って 普通に計算式(引き算)すれば経過日数出ませんでしたっけ? 自分は日数の計算表作って時々使ってます。 エクセルじゃなかったらすみません。

noscilbgqrjod
質問者

お礼

ありがとうございました。

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

関連するQ&A