http://kin.naver.com/detail/detail.php?d1id=1&dir_id=1050202&eid=aJuwCsNmmeMPTsF+k0OXS34mF+E6B4dt
아래 예시에서는 사수 10명, 부사수 7명, 타임 6회일 경우를 보였습니다만, n명 m명 t회일 경우라도 로직은 같습니다. 아래 표를 마우스로 긁어 복사(CTRL+C), 엑셀시트에 붙여 해당 주소로 가도록 옮기시고 수식 역시 마우스로 긁어 복사, 해당 주소창에 붙여넣으신 후 보시면 편합니다.
|
B |
C |
D |
E |
F |
G |
H |
I |
J |
K |
L |
M |
N |
O |
P |
2 |
정 |
10 |
|
부 |
7 |
|
타임 |
6 |
|
|
|
|
|
|
|
3 |
|
|
|
|
|
1 |
일차 |
|
|
|
2 |
일차 |
|
|
|
4 |
|
정 |
|
부 |
|
타임 |
A |
|
B |
|
타임 |
A |
|
B |
|
5 |
7 |
갑 |
2 |
자 |
|
0 |
|
|
|
|
0 |
2 |
4 |
1 |
5 |
6 |
9 |
을 |
5 |
축 |
|
1 |
1 |
1 |
2 |
2 |
1 |
4 |
6 |
3 |
7 |
7 |
10 |
병 |
1 |
인 |
|
2 |
3 |
3 |
4 |
4 |
2 |
6 |
1 |
5 |
2 |
8 |
2 |
정 |
7 |
묘 |
|
3 |
5 |
5 |
6 |
6 |
3 |
8 |
3 |
7 |
4 |
9 |
3 |
무 |
3 |
진 |
|
4 |
7 |
7 |
8 |
1 |
4 |
10 |
5 |
9 |
6 |
10 |
8 |
기 |
6 |
사 |
|
5 |
9 |
2 |
10 |
3 |
5 |
1 |
7 |
2 |
1 |
11 |
1 |
경 |
4 |
오 |
|
6 |
2 |
4 |
1 |
5 |
6 |
3 |
2 |
4 |
3 |
12 |
5 |
신 |
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
6 |
임 |
|
|
|
1 |
일차 |
|
|
|
2 |
일차 |
|
|
|
14 |
4 |
계 |
|
|
|
타임 |
A |
|
B |
|
타임 |
A |
|
B |
|
15 |
|
|
|
|
|
1 |
경 |
인 |
정 |
자 |
1 |
계 |
사 |
무 |
묘 |
16 |
|
|
|
|
|
2 |
무 |
진 |
계 |
오 |
2 |
임 |
인 |
신 |
자 |
17 |
|
|
|
|
|
3 |
신 |
축 |
임 |
사 |
3 |
기 |
진 |
갑 |
오 |
18 |
|
|
|
|
|
4 |
갑 |
묘 |
기 |
인 |
4 |
병 |
축 |
을 |
사 |
19 |
|
|
|
|
|
5 |
을 |
자 |
병 |
진 |
5 |
경 |
묘 |
정 |
인 |
20 |
|
|
|
|
|
6 |
정 |
오 |
경 |
축 |
6 |
무 |
자 |
계 |
진 |
기본테이블 (G3:P11) ; 해당 열 데이타를 하염 없이 반복시키기
H6:K6에 각각 1, 1, 2, 2 입력 (초기 값)
H7 =IF(H6+2>$C$2,MOD(H6,2)+1,H6+2) ; 위 숫자에 2를 더하되 초과하면 홀짝 교체
I7 =IF(I6+2>$F$2,MOD(I6,2)+1,I6+2) ; 마찬가지. 직전 A초소 근무였다면 지금부터는 B초소 근무가 됨.
; H7:I7 잡아 J7:K7에 복사, H7:K7 잡아 아래로 H11:K11까지 복사
M5 =H11 ; 전날 마지막 근무 데이타를 불러 옴
; M5 잡아 오른쪽으로 P5까지 복사, H7:K7 잡아 M6:P11에 복사하면 기본테이블 완성됨.
난수표로 데이타 섞기 (B4:E14) ; C, E열에 사수, 부사수 명단을 나열한 후,
B5 =SMALL(IF(COUNTIF(B4:B$4,ROW($1:$10))=0,ROW($1:$10),11),INT(RAND()*(C$2-COUNTA(B4:B$4)))+1)
D5 =SMALL(IF(COUNTIF(D4:D$4,ROW($1:$7))=0,ROW($1:$7),8),INT(RAND()*(F$2-COUNTA(D4:D$4)))+1)
; B5, D5 모두 수식 입력 후 CTRL+SHIFT+ENTER 해야 함 (배열 수식), B5 잡아 아래로 B14까지, D5 잡아 아래로 D11까지 복사. (B4, D4는 빈칸이어야 함)
결과테이블 (G13:P20) ; 기본테이블 수치에 VLOOKUP을 걸어 난수표로 섞인 이름을 가져 옴.
H15 =VLOOKUP(H6,$B$5:$C$14,2,0)
I15 =VLOOKUP(I6,$D$5:$E$11,2,0)
; H15:I15 잡아 J15:K15에 복사, H15:K15 잡아 아래로, 그리고 M15:P20에 복사하면 표가 완성됩니다.
이후는 L3:P20 잡아 오른쪽으로 원하는 만큼 복사해 붙여 넣으면 N일차의 근무명령이 나오겠지요. 다만 사수와 부사수의 수가 서로소가 아닐 경우 모두 만날 기회가 없어지는 단점이 있습니다. 그 경우라면 적절한 날에 H6:K6의 초기값을 바꿔주는 것이 좋을 겁니다. 그리고 난수를 사용했기 때문에 한번 작업 후에는 결과표를 복사-선택하여 붙여넣기-값-확인하여 적절한 곳에 붙여 두시는 것이 좋습니다.
'논리 > 엑셀 프로그래밍' 카테고리의 다른 글
주민등록번호로 만나이 구하기 (2) (0) | 2008.11.14 |
---|---|
검색결과를 5개/행 랜덤 정렬 (0) | 2008.11.14 |
2차원 배열 역추적, 데이타 재정렬 (0) | 2008.11.14 |
한글 - 영문 음절별 변환 (VLOOKUP) (0) | 2008.11.14 |
n*m 경우의 수를 빠짐 없이 찾기 (0) | 2008.11.14 |