논리/엑셀 프로그래밍

검색결과를 5개/행 랜덤 정렬

섬그늘 2008. 11. 14. 11:25

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을 더하면 해당 순서가 계산됩니다.