کریستین به روشی برای محاسبه اولین سه شنبه هر ماه نیاز دارد. بنابراین، با توجه به یک ماه و یک سال، او باید تاریخ اولین سه شنبه را دریافت کند.
چندین فرمول مختلف وجود دارد که می توانید برای رسیدن به نتیجه دلخواه از آنها استفاده کنید. اکثر رویکردها به نوعی از تابع WEEKDAY استفاده می کنند زیرا می تواند یک مقدار عددی نشان دهنده روز هفته برای هر تاریخ معینی را برگرداند. با فرض اینکه یک ماه را در سلول A1 (1 تا 12) و یک سال چهار رقمی را در سلول A2 قرار دهید، فرمول های زیر همگی تاریخ اولین سه شنبه ماه را نشان می دهند. (من فرمول ها را به ترتیب طول، از طولانی ترین به کوتاه ترین مرتب کرده ام.)
=DATE(A2,A1,1)+IF(WEEKDAY(DATE(A2,A1,1))=3,0,IF(WEEKDAY(DATE(A2,A1,1))>3,7-WEEKDAY(DATE(A2,A1,1))+3,3-WEEKDAY(DATE(A2,A1,1))))
=IF(3-WEEKDAY(DATE(A2,A1,1))>=0,DATE(A2,A1,1)+3-WEEKDAY(DATE(A2,A1,1)),DATE(A2,A1,1)+7+3-WEEKDAY(DATE(A2,A1,1)))
=DATE(A2,A1,1)+IF(3-WEEKDAY(DATE(A2,A1,1))>=0,3-WEEKDAY(DATE(A2,A1,1)),10-WEEKDAY(DATE(A2,A1,1)))
=DATE(A2,A1,1)-WEEKDAY(DATE(A2,A1,1),1)+3+IF(WEEKDAY(DATE(A2,A1,1),1)>3,7,0)
=DATE(A2,A1,1)+8-DAY(DATE(A2,A1,1))-WEEKDAY(DATE(A2,A1,1)-DAY(DATE(A2,A1,1))-2)
=DATE(A2,A1,1)+3-WEEKDAY(DATE(A2,A1,1))+(1-(3>=WEEKDAY(DATE(A2,A1,1))))*7
=DATEVALUE(A2&"/"&A1&"/1")+MOD(10-WEEKDAY(DATEVALUE(A2&"/"&A1&"/1")),7)
=DATE(A2,A1,MATCH(TRUE,WEEKDAY(DATE(A2,A1,{1,2,3,4,5,6,7}))=3,0))
=DATE(A2,A1,MOD(10-WEEKDAY(DATE(A2,A1,1)),7)+1)
=DATE(A2,A1,1)+MOD(3-WEEKDAY(DATE(A2,A1,1)),7)
=DATE(A2,A1,1)+7-WEEKDAY(DATE(A2,A1,1),13)
=DATE(A2,A1,8-WEEKDAY(DATE(A2,A1,1),13))
=DATE(A2,A1,7)-MOD(DATE(A2,A1,7)-3,7)
=DATE(A2,A1,8-WEEKDAY(DATE(A2,A1,5)))
=DATE(A2,A1,8)-WEEKDAY(DATE(A2,A1,5))
اگر تعیین تاریخی را در ماه مورد نظر برای ارزیابی راحت تر می دانید، می توانید فرمول ها را برای در نظر گرفتن آن تغییر دهید. در زیر فقط چند فرمول است که اگر تاریخ واقعی را در سلول A1 قرار دهید می توانید از آنها استفاده کنید:
=DATE(YEAR(A1),MONTH(A1),MATCH(TRUE,WEEKDAY(DATE(YEAR(A1),MONTH(A1),{1,2,3,4,5,6,7}))=3,0))
=DATE(YEAR(A1),MONTH(A1),MOD(10-WEEKDAY(DATE(YEAR(A1),MONTH(A1),1)),7)+1)
=DATE(YEAR(A1),MONTH(A1),1)+MOD(3-WEEKDAY(DATE(YEAR(A1),MONTH(A1),1)),7)
=DATE(YEAR(A1),MONTH(A1),1)+7-WEEKDAY(DATE(YEAR(A1),MONTH(A1),1),13)
=DATE(YEAR(A1),MONTH(A1),8-WEEKDAY(DATE(YEAR(A1),MONTH(A1),1),13))
=DATE(YEAR(A1),MONTH(A1),7)-MOD(DATE(YEAR(A1),MONTH(A1),7)-3,7)
=DATE(YEAR(A1),MONTH(A1),8-WEEKDAY(DATE(YEAR(A1),MONTH(A1),5)))
=DATE(YEAR(A1),MONTH(A1),8)-WEEKDAY(DATE(YEAR(A1),MONTH(A1),5))
=A1-DAY(A1)+7-WEEKDAY(A1-DAY(A1)-1,3)
در نهایت، ممکن است بخواهید یک رویکرد مبتنی بر کلان را در نظر بگیرید. زیر یک تابع تعریف شده توسط کاربر است که به سرعت اولین سه شنبه را مشخص می کند:
Function FirstTuesday(M As Integer, Y As Integer) As Date
Dim dResult As Date
dResult = DateSerial(Y, M, 1)
Do While Weekday(dResult) <> vbTuesday
dResult = DateAdd("d", 1, dResult)
Loop
FirstTuesday = dResult
End Function
تنها کاری که باید در کاربرگ خود انجام دهید این است که تابع تعریف شده توسط کاربر را ماه و سال عددی مورد نظر ارسال کنید:
=FirstTuesday(6,2018)
اگر ترجیح می دهید، می توانید مشخص کنید که ماه و سال در یک سلول هستند:
=FirstTuesday(A2,A1)