반응형

안녕하세요.

 

최**님이 메일로 질문을 하셨습니다.

 

근무자가 여러 명 있고, 근무지도 여러 군데 있어 날짜별로 근무자와 근무지를 달리해서 배정하는 방법을 묻는 내용이었습니다.

 

첨부한 엑셀 파일을 열어보니 질문의 의도를 명확히 설명하고 완성 모습까지 예시를 만들어 제시해 주셔서 문제를 이해하는데 큰 도움이 되었습니다.

 

종종 질문을 받고 해결방법을 제시하는데, 질문 자체를 이해하기 힘든 경우가 많습니다.

문제를 해결할 방법을 찾는데 써야할 에너지를 문제 이해에 쓰다가 답변하는 시간이 늦어지는 경우가 많습니다.

 

질문하는 것 또한 연습이 필요합니다.

그리고 질문하기 위해 글을 쓰다보면 자신이 원하는 바를 다시금 생각하게 되고 그러다 해결책을 찾기도 합니다.

인공지능에게 물어보는 방법도 다르지 않을 겁니다.

 

 

[B8] 셀에 시간을 들여 필요한 수식을 만들었습니다.

=INDEX($B$15:$J$15,1,MOD(DATE($B$3,$C$3,$D$3)+1+COLUMN(),9)+1)

 

[B10] 셀에는 수식을 조금 수정했습니다.

=INDEX($B$15:$J$15,1,MOD(DATE($B$3,$C$3,$D$3)+1+COLUMN()+5,9)+1)

 

 

이렇게 작성해서 답변 메일을 보냈는데, 다시 메일이 왔습니다.

 

답변주셔서 감사드립니다.
그런데 이번에는 수식이 좀 이해가 안되서 질문드립니다.
INDEX($B$15:$J$15,1,MOD(DATE($B$3,$C$3,$D$3)+1+COLUMN(),9)+1)에서
빨간부분이 이해가 잘 안됩니다. 왜 1을 더해주는지, 컬럼함수 숫자가 왜 필요한지, 마지막에 왜 1을 더해주는지 쳐다봐도 잘 이해가 되질 않아 
다시 도움 요청드립니다.^^
 
앞의 메일에서 실제 근무자는 50명이 넘는다는 이야기가 있어서 근무 순서 목록을 행 방향으로 나열했을 때 수식도 알려드릴까 생각했었지만, 수식을 작성하는 과정을 글로 쓰려면 시간이 많이 걸리고 생각의 과정을 떠올려 정리해야 하는 인내심이 요구되는 작업이라 적지 않았었습니다.
 
답변 메일을 보냈습니다.
 
안녕하세요.

[B8] 셀 수식
=INDEX($B$15:$J$15,1,MOD(DATE($B$3,$C$3,$D$3)+1+COLUMN(),9)+1)​

이 수식의 기준 날짜2026-01-01 입니다.
이 날짜를 숫자로 표현하면 46023입니다.

근무 순서 항목이 9개이므로 1부터 9까지의 숫자로 순환해서 나타나게 하려면 MOD 함수를 이용해 9로 나누어 나머지 값을 구하면 0부터 8까지의 9개 값을 구할 수 있습니다.
원하는 값은 INDEX 함수의 인수 중 열을 나타내는 인수에서 사용할 1부터 9인데, 0부터 8 값이 나오기 때문에 결과 값에 1을 더해  사용합니다. 이것이 수식 마지막에 1을 더한 이유입니다.

기준 날짜 460239나머지 연산하면 나머지 6이 나옵니다.
=MOD(46023, 9)

기준 날짜에 3을 더해 연산하면 나머지 값이 0이 되고, 연산 후 더하기 1을 하면 원하는 값 1이 됩니다.
그래서 만들어진 수식은
=INDEX($B$15:$J$15,1,MOD(DATE($B$3,$C$3,$D$3)+3,9)+1)​

입니다.

[B8] 셀 수식은 구했지만 이 수식을 [C8:F8] 셀 범위에 복사해서 써야 합니다.

[C8] 셀 수식의 결과값은 근무 순서 항목의 두번째가 선택되어야 하므로 2가 나와야 합니다.
나머지 셀들도 차례대로 결과값이 3, 4, 5가 나와야 하는데, 열 방향으로 값이 바뀌어 가니 열을 숫자로 나타내는 COLUMN 함수를 씁니다.

[B8] 셀에서 COLUMN 함수를 적용하면 B열이므로 2가 나옵니다.
기준 날짜의 나머지 연산 결과값이 0이 되도록 더하기 3을 했었는데, COLUMN 함수로 2가 나오니 더하기 1만 하면 원하는 결과가 됩니다.
그래서 완성된 수식은 
=INDEX($B$15:$J$15,1,MOD(DATE($B$3,$C$3,$D$3)+1+COLUMN(),9)+1)​

입니다.

[B10] 셀 수식
=INDEX($B$15:$J$15,1,MOD(DATE($B$3,$C$3,$D$3)+1+COLUMN()+5,9)+1)​

[B10] 셀 수식의 결과값은 6이 나와야 하므로 [B8] 셀 수식 내용에 더하기 5를 하는 부분이 추가되었습니다.
인원이 많아서 [B12] 셀에 추가로 나타내야 하는 경우라면 더하기 10을 하면 됩니다.

한 행에 5명으로 나타내므로 5의 배수값을 추가합니다.

앞에서 답변할 때 [B8] 셀에 작성한 하나의 수식으로 모든 셀을 구현하고 싶었는데, 당장 방법이 떠오르지 않아서 [B8] 수식과 [B10] 수식을 따로 만들었었습니다.

이 글을 쓰면서 방법이 떠올랐습니다.

[B8] 셀은 더하기 0, [B10] 셀은 더하기 5, 이렇게 8행부터 짝수 행 단위로 5씩 증가된 값이 나타나야 하므로 나누기 연산의 몫을 구하는 함수인 QUOTIENT 함수를 이용해서 수식을 작성합니다.
=INDEX($B$15:$J$15,1,MOD(DATE($B$3,$C$3,$D$3)+1+COLUMN()+(QUOTIENT(ROW()-8,2)*5),9)+1)​


이 수식 하나로 원하는 결과를 구할 수 있습니다. ^^
 

 

완성 파일 다운로드

근무배정표.xlsx
0.02MB

 

 

완성된 수식을 보면 꽤나 복잡해 보이고 길지만, 수식을 만드는 과정은 단계 단계 조금씩 만들어 최종결과를 구합니다.

그리고 어떤 함수를 쓸지 어떤 방법을 쓸지 생각하는 것은 이미 앞에서 해 왔던 문제를 해결하는 과정이나 공부한 내용에서 찾아오는 것입니다.

아예 처음부터 새롭게 새로운 구현 방법을 만들기는 휠씬 더 어려운 일입니다.

다행히 엑셀은 오래 전부터, 많은 사람들이 사용해 왔기 때문에 많은 방법들이 이미 만들어져 있습니다.

 

필요하신 분께 도움이 되길 바랍니다.

반응형

+ Recent posts