私はVBAのためにいくつかのVBAを書いています。現在または今後の土曜日の日付を把握する必要があります次の土曜日または現在の土曜日の日付はどのようにして知ることができますか?
だから金曜日なら、明日の日付(土曜日)を取得する必要があります。
今日が土曜日の場合は、今日の日付がほしいです。
日曜日の場合は、昨日の日付が必要です。
それは土曜日
横その後、月曜日の場合、私はあなたがこの数式を使用することができますExcelでは、この
私はVBAのためにいくつかのVBAを書いています。現在または今後の土曜日の日付を把握する必要があります次の土曜日または現在の土曜日の日付はどのようにして知ることができますか?
だから金曜日なら、明日の日付(土曜日)を取得する必要があります。
今日が土曜日の場合は、今日の日付がほしいです。
日曜日の場合は、昨日の日付が必要です。
それは土曜日
横その後、月曜日の場合、私はあなたがこの数式を使用することができますExcelでは、この
に「日付」にセルの書式設定を行いvbDays
変数とSelect Case
を使用して、理解しやすいものです。
一般的に3つのケースがあります - 今日は土曜日、日曜日、またはそれ以外です。これらはSelect Caseに表示されます。
この関数はdateであるため、Excelでは標準の日付結果として形式化されます。
Option Explicit
Public Function SaturdayIsComing() As Date
Select Case Weekday(Now)
Case vbSaturday
SaturdayIsComing = Now
Case vbSunday
SaturdayIsComing = DateAdd("d", -1, Now)
Case Else
SaturdayIsComing = DateAdd("d", vbSaturday - Weekday(Now), Now)
End Select
End Function
これは真夜中に非常に近く呼び出された場合、間違った値を返す可能性があります。 – GSerg
を達成することができますExcelやVBAで何かがあった場合、私は思っていた:
=TODAY()-WEEKDAY(TODAY())+IF(WEEKDAY(TODAY())>1, 7, 0)
あなたがExcelを使い、他のvba
プロジェクトに必要なだけであれば、望む結果が得られます。
Private Function saturdayFunction()
Dim dt As String
Dim lpDT As String
lpDT = Format(Now, "yyyy/MM/dd")
If Format(Now, "DDDD") = "Saturday" Then
dt = Format(Now, "yyyy/MM/dd")
ElseIf Format(Now, "DDDD") = "Sunday" Then
dt = Format(Now - 1, "yyyy/MM/dd")
Else
Do While Not dt = "Saturday"
dt = Format(CDate(lpDT) + 1, "DDDD")
lpDT = Format(CDate(lpDT) + 1, "yyyy/MM/dd")
Loop
dt = lpDT
End If
saturdayFunction = dt
End Function
ワンダフル、ワーキングコードの説明がないdownvote。 – GibralterTop
「ワーキングコード」と「あるマシンで正しい結果が得られるコード」は、非常に異なるものです。このコードは根本的に壊れており、 'en-us'ロケールでしか動作しません。また、すべての日付を文字列として格納し、ループの必要がないところでループを使用するため、アプローチが非常に間違っています。 – GSerg
@GSergあなたのポイントの多くは、https:/codereview.stackexchange.comに適していますが、これはどこに掲載されていません。 OPは決してロケールを述べなかった。サイトの言語と、私が 'en-us'フォーマットであると思っていた質問の大部分が与えられています。私はここで何も間違いないと思う。 – GibralterTop
これを試してください。ここで
=TODAY()+6-WEEKDAY(TODAY(),2)
多分これはhttps://superuser.com/questions/376698/how-to-get-the-dates-of-the-current-monday-wednesday-and-friday-of-the-currentに役立ちます – MatSnow