엑셀에서 셀을 참조할 때, 열은 알파벳(A, B, C…)으로 표시되고 행은 숫자(1, 2, 3…)로 표시됩니다. 매크로를 사용해 행과 열을 제어하려면, 행은 숫자여서 다루기 쉽지만 열은 알파벳으로 표시되기 때문에 자동화 과정에서 불편함이 있을 수 있습니다. 이번 글에서는 이러한 문제를 해결하기 위해 열을 나타내는 26진수와 10진수 상호 변환 및 함수 활용 방법을 알아보겠습니다.
엑셀 열 알파벳을 숫자로 변환하기, 26진수와 10진수 상호 변환 및 함수 활용 방법
1. 10진수와 26진수를 상호 변환하는 방법
① 10진수를 26진수로 변환하는 방법
- 변환 과정
- 주어진 숫자를 26으로 계속 나누기
- 나머지를 기록 (0-25)
- 몫이 0이 될 때까지 반복
- 나머지들을 아래에서 위로 읽어 알파벳으로 변환
- 예시 : 1000을 26진수로 변환
- 1000 ÷ 26 = 38 (나머지 12)
- 38 ÷ 26 = 1 (나머지 12)
- 1 ÷ 26 = 0 (나머지 1)
- 아래에서 위로 나머지를 알파벳으로 변환
- 1 → ‘A’ (아래에서 첫 번째)
- 12 → ‘L’ (아래에서 두 번째)
- 12 → ‘L’ (아래에서 세 번째)
따라서 1000의 26진수 표현은 ‘ALL’이 됩니다.
② 26진수를 10진수로 변환하는 방법
- 변환 과정
- 주어진 숫자에 오른쪽에서 왼쪽으로 자릿수만큼 26을 곱함.
- 곱해진 숫자를 더함
- 예시 : ACL를 10진수로 변환
- A = 1 × 26 ^ 2 = 676 : A는 오른쪽에서 왼쪽으로 2번째 (0부터 시작함)
- C = 3 × 26 ^ 1 = 78 : C는 오른쪽에서 왼쪽으로 1번째
- L = 12 : L은 오른쪽에서 왼쪽으로 0번째
- 676 + 78 + 12 = 766
따라서 ‘ACL’의 10진수는 766이 됩니다.
2. 10진수와 26진수 변환 함수
① 10진수를 26진수로 변환하는 함수
Function NumToBase26(num As Long) As String
Dim result As String
Dim remainder As Integer
Dim n As Long
n = num
While n > 0
remainder = n Mod 26
If remainder = 0 Then
result = "Z" & result
n = n \ 26 - 1
Else
result = Chr(remainder + 64) & result
n = n \ 26
End If
Wend
NumToBase26 = result
End Function
② 26진수를 10진수로 변환하는 함수
Function Base26ToNum(str As String) As Long
Dim i As Integer
Dim result As Long
str = UCase(str)
For i = 1 To Len(str)
result = result * 26 + (Asc(Mid(str, i, 1)) - 64)
Next i
Base26ToNum = result
End Function
3. 함수 사용 방법
① 함수 추가 방법
위에서 작성한 함수를 아래와 같이 추가합니다.
- Excel VBA 편집기(Alt + F11)를 엽니다.
- 새 모듈을 삽입(Insert > Module)합니다.
- 위의 코드를 붙여넣습니다.
- 저장 후 닫습니다.
② 함수 사용 예시
함수를 추가한 후, 엑셀 시트에서 아래와 같이 사용하거나, 매크로에서 직접 사용할 수도 있습니다.
- =Base26ToNum(“ALL”) 는 1000 반환
- =NumToBase26(1000) 은 “ALL” 반환
오늘은 엑셀에서 알파벳으로 되어 있는 26진수와 10진수 상호 변환 및 함수 활용 방법에 대해 알아보았습니다. 이 글에서 소개한 진수 변환 함수는 특히 엑셀 매크로를 자주 사용하는 분들에게 매우 유용한 도구가 될 것입니다. 이 방법이 업무 효율성을 높이는 데 도움이 되길 바랍니다.