http://kin.naver.com/detail/detail.php?d1id=1&dir_id=1050202&eid=exxLDufU7T5lsctpoSchKgdk6w+tdlVz
|
B |
C |
D |
E |
F |
G |
H |
I |
2 |
|
|
|
a |
b |
c |
d |
e |
3 |
1 |
0 |
|
11 |
12 |
15 |
5 |
7 |
4 |
2 |
0 |
|
20 |
4 |
19 |
13 |
3 |
5 |
3 |
3 |
|
18 |
#NUM! |
#NUM! |
#NUM! |
#NUM! |
6 |
4 |
4 |
|
|
|
|
|
|
7 |
5 |
5 |
|
|
|
|
|
|
8 |
6 |
0 |
|
|
|
|
|
|
9 |
7 |
7 |
|
|
|
|
|
|
10 |
8 |
0 |
|
|
|
|
|
|
11 |
9 |
0 |
|
|
|
|
|
|
12 |
10 |
0 |
|
|
|
|
|
|
13 |
11 |
11 |
|
|
|
|
|
|
14 |
12 |
12 |
|
|
|
|
|
|
15 |
13 |
13 |
|
|
|
|
|
|
16 |
14 |
0 |
|
|
|
|
|
|
17 |
15 |
15 |
|
|
|
|
|
|
18 |
16 |
0 |
|
|
|
|
|
|
19 |
17 |
0 |
|
|
|
|
|
|
20 |
18 |
18 |
|
|
|
|
|
|
21 |
19 |
19 |
|
|
|
|
|
|
22 |
20 |
20 |
|
|
|
|
E3 =SMALL(IF(($C$3:$C$22<>0)*(COUNTIF($E$2:$I2,$C$3:$C$22)+COUNTIF($D3:D3,$C$3:$C$22)=0),$C$3:$C$22),INT(RAND()*(SUMPRODUCT(N($C$3:$C$22<>0))-((ROW()-ROW($E$3))*5+COLUMN()-COLUMN($E$3))))+1)
수식 입력 후 CTRL+SHIFT+ENTER (배열수식) 해야 합니다. 그 후 E3 잡아 오른쪽으로 I3까지, E3:I3 잡아 아래로 데이타가 다 나올 때 까지 (#NUM! 에러가 뜰 때 까지) 복사하시면 표가 완성됩니다. (시작셀(예시에서는 E3) 바로 왼쪽 열(예시에서는 D열)은 비워 두어야 합니다.) RAND()함수를 쓴 수식이므로 시트를 변화시키면 숫자가 달라지는 바 한번 작업 후 결과표를 복사, 다른 곳에 선택하여 붙여넣기-값-확인...해두시는 것이 바람직합니다.
수식 설명 : SMALL(IF(조건),참조범위,순서)의 구조. 배열수식을 쓰면 조건에 맞으면 참조범위의 해당데이타를 임시저장합니다. 모두 저장되면 순서에 입각하여 SMALL함수로 값을 가져옵니다.
조건(초록색 부분) : 참조범위의 데이타가 (0이 아니고)*(앞에서 나오지 않았는지) 검사
순서 (붉은색 부분) : (0이 아닌 전체 데이타 수 ; SUMPRODUCT) - 이제껏 나온 데이타 수. 이 숫자에 RAND()를 곱하고 INT를 씌워 1을 더하면 해당 순서가 계산됩니다.
'논리 > 엑셀 프로그래밍' 카테고리의 다른 글
외부화일 참조 INDIRECT (0) | 2008.11.14 |
---|---|
주민등록번호로 만나이 구하기 (2) (0) | 2008.11.14 |
근무 명령 알고리즘 (사수/부사수) (0) | 2008.11.14 |
2차원 배열 역추적, 데이타 재정렬 (0) | 2008.11.14 |
한글 - 영문 음절별 변환 (VLOOKUP) (0) | 2008.11.14 |