http://kin.naver.com/detail/detail.php?d1id=1&dir_id=1050202&eid=1EKkAC0DHGd9Wi20+Q52+/64VwwrSOu+
제시하신 과제는 일반적인 함수, 기법으로 구현하기 매우 어려운 유형으로 보입니다. x, y축을 동시에 유동참조를 걸어야 하기 때문인데요, 아래 예시와 같이 방법은 있습니다. 다만...소수를 이용하여 위치 파악을 하는 방식이라서 데이타 수 (과제에서는 학교 수)가 몇 백개 수준이 되면 다 잡아내지 못하는 한계는 있겠습니다.
<Sheet1> ; 데이타가 B2:I10과 같이 있을 때,
|
B |
C |
D |
E |
F |
G |
H |
I |
J |
K |
2 |
학교 |
수 |
갑 |
을 |
병 |
정 |
무 |
기 |
|
|
3 |
계 |
12 |
2 |
1 |
4 |
1 |
2 |
2 |
|
|
4 |
a |
2 |
|
|
○ |
|
○ |
|
|
2 |
5 |
b |
2 |
○ |
|
○ |
|
|
|
|
3 |
6 |
c |
1 |
|
|
|
○ |
|
|
|
5 |
7 |
d |
2 |
|
○ |
○ |
|
|
|
|
7 |
8 |
e |
1 |
|
|
|
|
|
○ |
|
11 |
9 |
f |
2 |
|
|
○ |
|
|
○ |
|
13 |
10 |
g |
2 |
○ |
|
|
|
○ |
|
|
17 |
11 |
|
|
51 |
7 |
546 |
5 |
34 |
143 |
|
|
D11 =PRODUCT(IF(D4:D10<>"",$K4:$K10,1)) ; 수식입력 후 CTRL+SHIFT+ENTER(배열수식), D11 잡아 오른쪽으로 드래그, I11까지 채워 복사. K4:K10에 소수를 순차적으로 나열해 둠.
<Sheet2>
|
B |
C |
D |
E |
F |
G |
H |
I |
J |
K |
2 |
학생 |
계 |
|
2 |
3 |
5 |
7 |
11 |
13 |
17 |
3 |
갑 |
2 |
51 |
b |
g |
|
|
|
|
|
4 |
을 |
1 |
7 |
d |
|
|
|
|
|
|
5 |
병 |
4 |
546 |
a |
b |
d |
f |
|
|
|
6 |
정 |
1 |
5 |
c |
|
|
|
|
|
|
7 |
무 |
2 |
34 |
a |
g |
|
|
|
|
|
8 |
기 |
2 |
143 |
e |
e |
|
|
|
|
|
E2 =OFFSET(Sheet1!$K$4,COLUMN()-COLUMN($E2),0)
B3 =OFFSET(Sheet1!$D$2,0,ROW()-ROW(B$3))
C3 =HLOOKUP($B3,Sheet1!$D$2:$I$3,2,0)
D3 =HLOOKUP($B3,Sheet1!$D$2:$I$11,10,0)
E3 =IF(COLUMN()-COLUMN($D2)>$C3,"",INDEX(Sheet1!$B$4:$B$10,MATCH(MIN(IF(MOD($D3,$E$2:$K$2)=0,$E$2:$K$2)),$E$2:$K$2,0),1))
F3 =IF(COLUMN()-COLUMN($D2)>$C3,"",INDEX(Sheet1!$B$4:$B$10,MATCH(MIN(IF((MOD($D3,$E$2:$K$2)=0)*(VLOOKUP(E3,Sheet1!$B$4:$K$10,10)<$E$2:$K$2),$E$2:$K$2)),$E$2:$K$2,0),1))
E3, F3는 수식 입력 후 CTRL+SHIFT+ENTER (배열수식)하셔야 합니다. 이후 E2 잡아 F2에 복사, F2:F3 잡아 K2:K3에 복사, B3:K3 잡아 아래로 데이타 행 만큼 복사하면 표가 완성됩니다.
덧붙임 :
'논리 > 엑셀 프로그래밍' 카테고리의 다른 글
검색결과를 5개/행 랜덤 정렬 (0) | 2008.11.14 |
---|---|
근무 명령 알고리즘 (사수/부사수) (0) | 2008.11.14 |
한글 - 영문 음절별 변환 (VLOOKUP) (0) | 2008.11.14 |
n*m 경우의 수를 빠짐 없이 찾기 (0) | 2008.11.14 |
숫자대로 데이타 나열 (0) | 2008.11.14 |