|
B |
C |
D |
E |
F |
G |
2 |
AAA |
|
|
|
|
|
3 |
AAB |
|
1 |
2 |
3 |
|
4 |
AAC |
|
676 |
52 |
3 |
|
5 |
AAD |
|
|
|
|
|
6 |
AAE |
|
731 |
1 |
2 |
3 |
7 |
AAF |
|
|
B |
C |
D |
8 |
AAG |
|
|
BCD |
|
|
시작셀이 B2일 때
B2 =CHAR(65+MOD(INT((ROW()-ROW(B$2))/26^2),26))&CHAR(65+MOD(INT((ROW()-ROW(B$2))/26),26))&CHAR(65+MOD((ROW()-ROW(B$2)),26))
B2를 아래로 복사 (26*26*26=17,576행) 하면 작업 끝.
간단한 설명 : ROW함수로써 일련번호를 구하고, 그 일련번호를 26진법 세자리로 INT, MOD함수를 써서 변환함. 각 자리수에 CHAR함수를 씌워 세 문자를 결합하면 일련번호에 해당하는 알파벳이 구해짐.
예를 들어 26진법 세 자리 수 123이 있다고 할 때 (D3:F3),
D4 =D3*26^2
E4 = E3*26
F4 = F3
D6 = SUM(D4:F4) 로써 26진법 세 자리 수를 십진법으로 바꿀 수 있음.
역으로, 십진법 D6를 26진법 세 자리 수로 분해하고자 하면
E6 =MOD(INT($D6/26^2),26)
F6 =MOD(INT($D6/26),26)
G6 =MOD(INT($D6),26)
E7 =CHAR(65+E6) ; 숫자에 해당하는 알파벳. E7 잡아 F7, G7에 복사
E8 =E7&F7&G7 ; 세 문자를 하나로 결합, 답을 얻음.
이렇게 하여 어떤 십진법 수이든 세 자리의 26진법 수로 변환할 수 있음. 행마다 십진법으로 1씩 증가하게 하려면 ROW()-ROW(시작셀)을 쓰는 것이 손쉬움. 이 함수를 E6:G6의 $D6에 집어 넣고 E7거쳐 E8로 결합하면 B2의 비교적 복잡해보이는 수식을 얻습니다.
'논리 > 엑셀 프로그래밍' 카테고리의 다른 글
다중 순위 (SUMPRODUCT) (0) | 2008.11.13 |
---|---|
CHOOSE 응용 (채점 결과) (0) | 2008.11.13 |
일의 자리 우선으로 정렬 (0) | 2008.11.13 |
시작부터 2년 이내 데이타 추출 (0) | 2008.11.13 |
조건에 맞는 숫자를 순서대로 출력 (0) | 2008.11.13 |