논리/엑셀 프로그래밍

알파벳 채우기 (ABC)

섬그늘 2008. 11. 13. 15:37

 

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의 비교적 복잡해보이는 수식을 얻습니다.