Microsoft ExcelでVBAを使用して、週の開始日を計算
この記事では、ユーザー定義関数(UDF)またはカスタム関数を作成して、月曜日を週の最初の日と見なして、特定の週の最初の日付を検索します。指定された年、月、または日付から指定された週数の後の最初の週の日付を返すカスタム関数を作成します。
この記事では、生データは週番号、日、月、年で構成されています。
カスタム関数には、入力パラメーターとして日、月、年、週の番号があります。これらの入力値に基づいて、関数はその週の最初の日を返します。
カスタム関数「WeekStartDate」の構文はWeekStartDate(WeekNumber、Year、Month、Day)です
月と日はオプションのパラメータです。
この関数は、月曜日を週の最初の日と見なします。
WeekStartDate関数は、Day、Month、およびYearパラメーターで指定された日付から指定された週数の後の最初の曜日を返します。 Dayパラメーターが指定されていない場合、指定された年のMonthパラメーターで指定された月の指定された週数の後の最初の曜日を返します。 MonthパラメータとDayパラメータの両方が指定されていない場合は、指定された週の最初の日が返されます。
ロジックの説明
週の最初の日を検索するための「WeekStartDate」カスタム関数を作成しました。この関数に使用されるロジックは、指定された日付の曜日が4未満の場合、現在の週が最初の週と見なされるというものです。それ以外の場合、指定された日付の曜日が4より大きい場合、翌週が最初の週と見なされます。
コードの説明
DateSerial(intYear、intMonth、intDay)
DateSerial関数は、日、月、年の値から日付を取得するために使用されます。
Weekday(FromDate、vbMonday)
平日関数は、月曜日を週の最初の日と見なして、日付の曜日を取得するために使用されます。
WKDay> 4の場合WDays =(7 intWeek)-WKDay + 1 Else WDays =(7(intWeek-1))-WKDay + 1 End If上記のコードを使用して、最初の日付を見つけるために含める日数を見つけますその週の。曜日の値が4未満の場合、現在の週が最初の週と見なされます。そのため、1を減算しました。つまり
(intWeek-1)。週の最初の日を検索するため、1が追加されます。
コードについては以下に従ってください
Option Explicit Function WeekStartDate(intWeek As Integer, intYear As Integer, Optional intMonth As Integer = 1, Optional intDay As Integer = 1) 'Declaring variables Dim FromDate As Date, lngAdd As Long Dim WKDay, WDays As Integer WDays = 0 'Checking that year should not have negative value If intYear < 1 Then WeekStartDate = "Year cann't have negative value" Exit Function End If 'Calculating the date FromDate = DateSerial(intYear, intMonth, intDay) 'Getting the week day of the specified date considering monday as first day WKDay = Weekday(FromDate, vbMonday) 'If value of week day is less than 4 then subtracting 1 from the week number If WKDay > 4 Then WDays = (7 * intWeek) - WKDay + 1 Else WDays = (7 * (intWeek - 1)) - WKDay + 1 End If 'Return the first day of the week WeekStartDate = FromDate + WDays End Function
このブログが気に入ったら、FacebookやFacebookで友達と共有してください。
皆様からのご意見をお待ちしております。私たちの仕事を改善し、あなたのために改善する方法をお知らせください。 [email protected]までご連絡ください