Excel VBA: Convert Column Index to Column Name

Microsoft Excel1 Comment on Excel VBA: Convert Column Index to Column Name

Excel VBA: Convert Column Index to Column Name

This article demonstrates how you can convert a Excel column index to the corresponding alphabetical character name of the column. For example, the column number 30 will be converted to the equivalent string “AD”.

I often use this function when I am referring to ranges in Excel, or when I dynamically generate formulas.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
' Column Index To Column Name
Public Function ColumnIndexToColumnName(ByVal intColumnIndex As Integer) As String
' Constants
Const NUMBER_BASE As Integer = 26 ' 26th number system, i.e. A-Z
Const MAX_COLUMNS As Integer = 256
Const ASCII_A As Integer = 65
' Variables
Dim strName As String
Dim strChar As String
Dim intValue As Integer
' Valid index?
If (intColumnIndex < 1) Then
' Error
Err.Raise 234, , "The column index can not be less than 1!"
Exit Function
End If
' Valid index?
If (intColumnIndex > MAX_COLUMNS) Then
' Error
Err.Raise 234, , "The column index can not be more than " & MAX_COLUMNS & "!"
Exit Function
End If
' Build string based on the 26th numbering system,
' i.e. A-Z
' Build name string
Do While (intColumnIndex > 0)
' Get the remaining value
intValue = ((intColumnIndex - 1) Mod NUMBER_BASE)
' Remove handled value
intColumnIndex = (intColumnIndex - 1) \ NUMBER_BASE
' Get the character
strChar = Chr(intValue + ASCII_A)
' Build the name
strName = strChar & strName
Loop
' Return the name
ColumnIndexToColumnName = strName
End Function
' Column Index To Column Name Public Function ColumnIndexToColumnName(ByVal intColumnIndex As Integer) As String ' Constants Const NUMBER_BASE As Integer = 26 ' 26th number system, i.e. A-Z Const MAX_COLUMNS As Integer = 256 Const ASCII_A As Integer = 65 ' Variables Dim strName As String Dim strChar As String Dim intValue As Integer ' Valid index? If (intColumnIndex < 1) Then ' Error Err.Raise 234, , "The column index can not be less than 1!" Exit Function End If ' Valid index? If (intColumnIndex > MAX_COLUMNS) Then ' Error Err.Raise 234, , "The column index can not be more than " & MAX_COLUMNS & "!" Exit Function End If ' Build string based on the 26th numbering system, ' i.e. A-Z ' Build name string Do While (intColumnIndex > 0) ' Get the remaining value intValue = ((intColumnIndex - 1) Mod NUMBER_BASE) ' Remove handled value intColumnIndex = (intColumnIndex - 1) \ NUMBER_BASE ' Get the character strChar = Chr(intValue + ASCII_A) ' Build the name strName = strChar & strName Loop ' Return the name ColumnIndexToColumnName = strName End Function
' Column Index To Column Name
Public Function ColumnIndexToColumnName(ByVal intColumnIndex As Integer) As String
    ' Constants
    Const NUMBER_BASE As Integer = 26   ' 26th number system, i.e. A-Z
    Const MAX_COLUMNS As Integer = 256
    Const ASCII_A As Integer = 65
    
    ' Variables
    Dim strName As String
    Dim strChar As String
    Dim intValue As Integer
    
    ' Valid index?
    If (intColumnIndex < 1) Then
        ' Error
        Err.Raise 234, , "The column index can not be less than 1!"
        Exit Function
    End If
    
    ' Valid index?
    If (intColumnIndex > MAX_COLUMNS) Then
        ' Error
        Err.Raise 234, , "The column index can not be more than " & MAX_COLUMNS & "!"
        Exit Function
    End If
    
    ' Build string based on the 26th numbering system,
    ' i.e. A-Z
    
    ' Build name string
    Do While (intColumnIndex > 0)
        ' Get the remaining value
        intValue = ((intColumnIndex - 1) Mod NUMBER_BASE)

        ' Remove handled value
        intColumnIndex = (intColumnIndex - 1) \ NUMBER_BASE

        ' Get the character
        strChar = Chr(intValue + ASCII_A)

        ' Build the name
        strName = strChar & strName
    Loop
    
    ' Return the name
    ColumnIndexToColumnName = strName
End Function

Usage

If you would like to dynamically generate a formula with cell references in Excel, it doesn’t work to specify a column index. If you know the row- and column index, then you can generate the valid Excel cell reference name.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
' Example constants
Const ROW_INDEX As Integer = 50
Const COLUMN_INDEX As Integer = 30
' Result
Dim strReference As String
Dim objRange As Range
' Convert row index 50 and column index 30 to a valid cell reference, i.e. AD50
strReference = ColumnIndexToColumnName(COLUMN_INDEX) & CStr(ROW_INDEX)
' Get the single cell range
Set objRange = Range(strReference)
' Example constants Const ROW_INDEX As Integer = 50 Const COLUMN_INDEX As Integer = 30 ' Result Dim strReference As String Dim objRange As Range ' Convert row index 50 and column index 30 to a valid cell reference, i.e. AD50 strReference = ColumnIndexToColumnName(COLUMN_INDEX) & CStr(ROW_INDEX) ' Get the single cell range Set objRange = Range(strReference)
' Example constants
Const ROW_INDEX As Integer = 50
Const COLUMN_INDEX As Integer = 30

' Result
Dim strReference As String
Dim objRange As Range

' Convert row index 50 and column index 30 to a valid cell reference, i.e. AD50
strReference = ColumnIndexToColumnName(COLUMN_INDEX) & CStr(ROW_INDEX)

' Get the single cell range
Set objRange = Range(strReference)

Related

Ulf Emsoy has long working experience in project management, software development and supply chain management.

One thought on “Excel VBA: Convert Column Index to Column Name

Leave a Reply

Your email address will not be published. Required fields are marked *

Back To Top