엑셀로 달력은 서식파일을 불러오는 방법도 있지만 이미 만들어져있는 달력을 수정해서 사용할 수 없을때 간단하게 함수를 이용하여 달력을 만들수 있습니다.

 

제가 개인적으로 사용하는 방법이니 여러분들도 따라하시어 간단하게 달력을 만들어 보세요.

 

1. 드롭다운 만들기

 

※ 년도와 월 데이터를 이름관리자로 만들었습니다.

위 그림처럼 드롭다운이 만들어 졌습니다.

 

2. 드롭다운 선택된 년도와 월을 가지고 함수 작성.

 

1의 함수 : "=DATE($J$2,$J$3,1)"

  - 년도(J2), 월(J3)로 날짜를 만드는 함수입니다.

  - DATE함수는 "DATE(연도, 월, 일)"을 넣어 날짜를 만드는 함수입니다.

  - 일은 1일로 지정(1일이 없는 년,월은 없으니까요)

 

2의 함수 : "=TEXT($A$1,"AAA")"  

  - 선택한 년,월,일이 무슨요일인지를 알아야 합니다. 

  - TEXT함수는 어떤형식으로 값을 출력할지를 임의로 지정하는 함수입니다.

  - TEXT(값, 형식)은 값인 날짜를 요일("AAA")로 반환하도록 했습니다.

 

3의 함수 : "=IF($B$1=A2,1,"")"

  - 그 요일이 2번행에 적혀있는 요일중에 어디에 위치해야 하는지를 알기 위해 1을 반환하는 함수를 작성하였습니다.

  -  A3셀을 드레그앤 드롭으로 G3까지 넣으세요.

 

※ 여기까지 따라하셨으면 기준년도와 기준월에 따라 3행에 1이 일~토중에 어디에 있는지 왔다갔다하는것을 볼 수 있습니다. 기준년도 : 2023, 기준월 : 11 로 변경해보시면 D3에 1이 표시되는걸 알 수 있습니다.

 

1의 함수 : "=COUNTIF(OFFSET($A$3,0,0,1,COLUMN()),1)"

  - COUNTIF는 범위안에 특정 값이 몇개 있는지 세는 함수입니다.

  - OFFSET은 범위를 만드는 함수입니다.

  - A4셀을 G4까지 드래그앤드롭하세요.

  - COUNTIF(OFFSET(A3부터, 아래로 0칸, 오른쪽으로 0칸, 아래로는 1행이 범위, 우측으로는 컬럼 수 만큼 범위),1을 찾아라) 이러한 의리입니다. OFFSET을 사용하여 유동적인 범위가 되었습니다. 이 함수를 B4에 입력되었다면 COLUMN은 B열이므로 A=1, B=2 로 2라는 값을 반환하여 A3~B3까지가 범위가 되는 것이고, 그안에서 1을 찾는 것입니다.

 - 예시는 수요일에 1이 있습니다. 따라서 D4~G4까지만 1이 반환될것입니다.

   

2의 함수 : "=SUM(OFFSET($A$4,0,0,1,COLUMN()))"

 - 1과 같은 논리로 함수가 입력된 곳까지 더할 수 있도록 했습니다.

 - A5에 입력하시고 G5까지 드래그 앤 드롭하세요.

 

3의 함수 : "=IF(A5=0,"",DATE($J$2,$J$3,A5))"

 - 만약 A5가 0이라면(11월 1일이 수요일이므로 그 전까지는 0이 반환됩니다.)아무것도 출력하지 말고, 아니라면 DATE함수를 사용하여 년도는 J2, 월은 J3, 일은 A5로 날짜를 반환하는 함수입니다.

 - A6셀을 G6까지 드래그 앤드롭하세요.

 - C5까지는 0이므로 아무것도 출력하지 않을테고 수요일(D6)부터 날짜를 적을 것입니다.

 - 보이는 5자리 숫자는 날짜이며, 형식을 날짜로 바꾸면 날짜로 보입니다.

 - 날짜로 변경하여 보기 쉽게 해주세요

 

3. 달력만들기

1의 함수 : =$J$2&"년도 "&$J$3&"월"

 - 몇년 몇월 달력인지 표기하기 위한 수식으로 &를 사용하여 만들었습니다.

 

2의 함수 : =A6

 - 미리 만들어 놓은 6행에 있는 날짜를 불러오는 것입니다.

 - I8셀을  O8까지 드래그엔 드롭하세요.

 

3의 서식 

 - Ctrl+1을 눌러서 서식창을 여세요. 

 - 사용자지정에 형식은 dd(일자만 표시)로 입력하세요.

 

1의 함수 : =IF(O8="","",IFERROR(IF(MONTH(O8+1)=MONTH($A$1),O8+1,""),""))

 - IF(O8="","", 부분 : 만약 O8(전주 토요일)이 비어있다면 아무것도 하지 않은다.

 - IF(MONTH(O8+1)=MONTH($A$1),O8+1,"") 부분 : 만약 O8(전주 토요일)+1의 월이 A1(해당월의 1일)의 월과 같다면(요일날짜에서 +1일이 11월이라면 이라는 의미입니다.) O8+1을 하고, 아니라면 공백을 반환

 - IFERROR(함수,"") 부분 : 만약 에러가 난다면 공백을 반환

 

2의 함수 : =IF(I10="","",IFERROR(IF(MONTH(I10+1)=MONTH($A$1),I10+1,""),""))

 - 1의 함수와 같으나 더해야 하는 날짜가 전주 토요일이 아닌 바로 왼쪽에 있는 전일을 더하는 것입니다. 

 - J10셀을 O10까지 드래그 앤 드롭하세요.

 

 

계산만 하고 볼 필요가 없는 A~G열까지는 숨기기 처리 하세요.

 

완성된 달력을 볼 수 있습니다.

+ Recent posts