엑셀에서 달력 주를 날짜로 변환하려면 어떻게 해야 합니까?
저는 주 번호와 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
'programing' 카테고리의 다른 글
텍스트 상자에 자리 표시자 텍스트 추가 (0) | 2023.05.09 |
---|---|
jQuery 또는 플레인 자바스크립트를 사용하여 URL 매개 변수를 가져오는 방법은 무엇입니까? (0) | 2023.05.09 |
배열의 크기를 찾는 방법(첫 번째 요소 배열을 가리키는 포인터에서)? (0) | 2023.05.04 |
전체 ASP에 대해 브라우저 캐시를 비활성화합니다.NET 웹사이트 (0) | 2023.05.04 |
명령줄을 통해 OS X에서 간단한 Hello World 프로그램 컴파일 (0) | 2023.05.04 |