web-dev-qa-db-ja.com

VBAで日付の違いを見つける方法

システム日付とワークシートに保存されている日付の違いを調べようとしています。それらの差が30日を超える場合、結果はtrueです。それ以外の場合、結果はfalseです。

Dim result as boolean
Dim sDate as string
sDate = Date
if Worksheets("dates").Cells(1,1) - sDate > 30 then 'how do I do this?
     result = true
else
     result = false
end if

システム日付とワークシートに保存されている日付の日数の違いを確認するにはどうすればよいですか?ワークシートの日付は過去の日付にすることもできます。

9
Ank

なぜ日付関数を使っている人を見かけないのだろうか。

これを使用することもできます:

if DateDiff("d", date1, date2) > 30 then

この場合、date1はCDate(Worksheets( "dates")。Cells(1,1))になり、date2はsdateになります(CDateでキャストするか、Jeffが言ったように日付として暗くします。

「d」は、日数の差が出ていることを意味します。 VBAの年、月などの間隔は次のとおりです。

yyyy - Year
q - Quarter
m - Month
y - Day of year
d - Day
w - Weekday
ww - Week
h - Hour
n - Minute
s - Second
28
Justin Self

これを試して:

if CDate(Worksheets("dates").Cells(1,1)) - sDate > 30 then
3

sDateは文字列であり、実際の日付ではありません。

CDate()関数またはDateValue()関数のいずれかを使用して、文字列を日付に変換します。

ただし、この種の変換には注意が必要です。これらの変換は、次の構造を処理します。

yyyy/mm/dd
yyyy/m/d
mm/dd/yyyy
m/d/yyyy

これらは正しく変換されません

dd/mm/yyyy
d/m/yyyy

また、2桁の年は使用しないでください。

日付変換にはDateSerial()関数を使用することをお勧めします。

したがって、コードに関しては、yorシートの値が実際に日付であると想定します(確かに、列を選択して数値形式をGENERALに変更します。実際の日付の場合は、それぞれに純粋な数値が表示されます。必ず[元に戻す]をクリックしてください。日付形式を元に戻す)

Dim result As Boolean

If Worksheets("dates").Cells(1, 1).Value - Date > 30 Then
     result = True
Else
     result = False
End If
1
SkipVought