3

I want to take a number and convert it into lowercase a-z letters using VBScript.

For example:

  • 1 converts to a
  • 2 converts to b
  • 27 converts to aa
  • 28 converts to ab
  • and so on...

In particular I am having trouble converting numbers after 26 when converting to 2 letter cell names. (aa, ab, ac, etc.)

Stevoisiak
  • 23,794
  • 27
  • 122
  • 225
Xeric
  • 53
  • 1
  • 4
  • 1
    Possible duplicate of [Function to convert column number to letter?](http://stackoverflow.com/questions/12796973/function-to-convert-column-number-to-letter) – Clijsters Aug 05 '16 at 19:20

3 Answers3

5

You should have a look at the Chr(n) function.

This would fit your needs from a to z:

wscript.echo Chr(number+96)

To represent multiple letters for numbers, (like excel would do it) you'll have to check your number for ranges and use the Mod operator for modulo.


EDIT:

There is a fast food Copy&Paste example on the web: How to convert Excel column numbers into alphabetical characters

Quoted example from microsoft:

For example: The column number is 30.

The column number is divided by 27: 30 / 27 = 1.1111, rounded down by the Int function to "1".

i = 1

Next Column number - (i * 26) = 30 -(1 * 26) = 30 - 26 = 4.

j = 4

Convert the values to alphabetical characters separately,

i = 1 = "A"
j = 4 = "D"

Combined together, they form the column designator "AD".

And its code:

Function ConvertToLetter(iCol As Integer) As String
   Dim iAlpha As Integer
   Dim iRemainder As Integer
   iAlpha = Int(iCol / 27)
   iRemainder = iCol - (iAlpha * 26)
   If iAlpha > 0 Then
      ConvertToLetter = Chr(iAlpha + 64)
   End If
   If iRemainder > 0 Then
      ConvertToLetter = ConvertToLetter & Chr(iRemainder + 64)
   End If
End Function
Clijsters
  • 4,031
  • 1
  • 27
  • 37
2

Neither of the solutions above work for the full Excel range from A to XFD. The first example only works up to ZZ. The second example has boundry problems explained in the code comments below.

// Function ColumnNumberToLetter(ColumnNumber As Integer) As String

' convert a column number to the Excel letter representation

Dim Div As Double
Dim iMostSignificant As Integer
Dim iLeastSignificant As Integer
Dim Base As Integer
Base = 26
' Column letters are base 26 starting at A=1 and ending at Z=26
' For base 26 math to work we need to adjust the input value to
' base 26 starting at 0
Div = (ColumnNumber - 1) / Base
iMostSignificant = Int(Div)
' The addition of 1 is needed to restore the  0 to 25 result value to 
' align with A to Z
iLeastSignificant = 1 + (Div - iMostSignificant) * Base
' convert number to letter
ColumnNumberToLetter = Chr(64 + iLeastSignificant)
' if the input number is larger than the base then the conversion we
' just did is the least significant letter
' Call the function again with the remaining most significant letters
If ColumnNumber > Base Then
    ColumnNumberToLetter = ColumnNumberToLetter(iMostSignificant) & ColumnNumberToLetter
End If

End Function //

0

try this

function converts(n)
  Dim i, c, m
  i = n
  c = ""
  While i > 26
    m = (i mod 26)
    c = Chr(m+96) & c
    i = (i - m) / 26
  Wend
  c = Chr(i+96) & c
  converts = c
end function

WScript.Echo converts(1000)
some1
  • 857
  • 5
  • 11