programing

엑셀에서 달력 주를 날짜로 변환하려면 어떻게 해야 합니까?

megabox 2023. 5. 9. 22:11
반응형

엑셀에서 달력 주를 날짜로 변환하려면 어떻게 해야 합니까?

저는 주 번호와 1년이 있고, 마이크로소프트 엑셀에서 해당 주의 월요일 날짜를 계산하고 싶습니다.

Year   Week   Date (Monday)
2012   1      January 2, 2012
2013   16     April 15, 2013
2014   42     October 13, 2014

달력 주를 특정 날짜로 변환하는 데 사용할 수 있는 공식은 무엇입니까?

ISO 주 번호의 경우 이 공식을 사용하여 월요일을 얻을 수 있습니다.

=DATE(A2,1,-2)-WEEKDAY(DATE(A2,1,3))+B2*7

A2의 연도와 B2의 주 번호를 가정합니다.

제가 여기서 대답한 과 같습니다. https://stackoverflow.com/a/10855872/1124287

다음 공식은 매년 적합합니다.더 이상 조정할 필요가 없습니다.전제 조건은 월요일이 당신의 첫 번째 요일입니다.

If A2 = Year and Week = B2
=IF(ISOWEEKNUM(DATE($A$2;1;1)-WEEKDAY(DATE($A$2;1;1);2)+1)>1;DATE($A$2;1;1)-WEEKDAY(DATE($A$2;1;1);2)+1+B2*7;DATE($A$2;1;1)-WEEKDAY(DATE($A$2;1;1);2)-6+B2*7)

주 번호가 A1이고 연도가 A2인 경우 다음 스니펫을 통해 전체 주의 날짜를 알 수 있습니다.

=$A$1*7+DATE($B$1,1,-4) through =$A$1*7+DATE($B$1,1,2)

물론 시리즈를 -4부터 2까지 완성하고 일요일부터 토요일까지 데이트를 할 수 있습니다.

이게 도움이 되길 바랍니다.

주 번호가 다음에 있는 경우A1그리고 해의A2시도할 수 있습니다.

A1*7+DATE(A2,1,1)

간단한 해결책은 다음 공식을 수행하는 것입니다.

A1*7+DATE(A2,1,1)

수요일을 반환하는 경우 공식을 다음으로 변경합니다.

(A1*7+DATE(A2,1,1))-2

이는 1년 이내의 날짜에만 적용됩니다.

=(MOD(R[-1]C-1,100)*7+DATE(INT(R[-1]C/100+2000), 1,1)-2)

yyww는 주어진 주 exp:51주 2014년은 1451년이 될 것입니다.

A1의 주 번호와 연도가 ww 형식의 3자리 또는 4자리 정수인 경우YY 공식은 다음과 같습니다.

=INT(A1/100)*7+DATE(MOD([A1,100),1,1)-WEEKDAY(DATE(MOD(A1,100),1,1))-5

평일을 빼면 일관된 시작 요일을 반환할 수 있습니다.마지막 빼기를 사용하여 시작 날짜를 조정합니다.

만약 당신이 주 번호에서 날짜를 얻기 위해 반대를 찾고 있다면, 나는 온라인에서 해결책을 찾았고 그것을 약간 바꿨습니다.

Function fnDateFromWeek(iYear As Integer, iWeek As Integer, iWeekDday As Integer)
  ' get the date from a certain day in a certain week in a certain year
  fnDateFromWeek = DateSerial(iYear, 1, (iWeek * 7) _
          + iWeekDday - Weekday(DateSerial(iYear, 1, 1)) + 1)
End Function

저는 asap-utilities.com/ 에서 공식을 가져다가 바꿨습니다.

DateSerial(iYear, 1, ((iWeek - 1) * 7) 

로.

DateSerial(iYear, 1, (iWeek * 7)

갱신하다

적어도 독일의 경우 2016년 윤년에 대한 예상과 다르게 공식적인 작업이 진행되는 것 같아 이것으로 변경했습니다.

Function fnDateFromWeek(iYear As Integer, iWeek As Integer, iWeekDday As Integer)
' get the date from a certain day in a certain week in a certain year
  
    If isLeapYear(iYear) Then
        curDate = DateSerial(iYear, 1, ((iWeek) * 7) _
          + iWeekDday - Weekday(DateSerial(iYear, 1, 1)) + 1)
    Else
        curDate = DateSerial(iYear, 1, ((iWeek - 1) * 7) _
          + iWeekDday - Weekday(DateSerial(iYear, 1, 1)) + 1)
    End If
    fnDateFromWeek = curDate
End Function

2016년 하드코드는 이상적이지 않기 때문에 이 기능으로 연도가 윤년인지 확인할 수 있습니다.

Function isLeapYear(iYear As Integer) As Boolean

    If (Month(DateSerial(iYear, 2, 29)) = 2) Then
        isLeapYear = True
    Else
        isLeapYear = False
    End If
    
End Function

비약적이지 않은 해 동안DateSerial(iYear,2 ,29)3월 1일에 돌아옵니다.

이것은 여전히 틀릴 수 있지만, 나의 제한된 테스트는 예상되는 결과를 주었습니다.

Sub TestExample()
   Debug.Print Format(fnDateFromWeek(2014, 48, 2), "ddd dd mmm yyyy") ' mo 24 Nov 2014
   Debug.Print Format(fnDateFromWeek(2015, 11, 6), "ddd dd-mmm-yyyy") ' fr 13 Mar 2015
   Debug.Print Format(fnDateFromWeek(2016, 36, 2), "ddd dd-mmm-yyyy") ' Mo 05 Sep 2015
End Sub

언급URL : https://stackoverflow.com/questions/10995917/how-do-i-convert-a-calendar-week-into-a-date-in-excel

반응형