Convert a number to the corresponding Excel column

I need help executing logic that converts a numeric value to the corresponding MS Excel header value.

For example:

1 = "A" 2 = "B" 3 = "C" 4 = "D" 5 = "E" ......... 25 = "Y" 26 = "Z" 27 = "AA" 28 = "AB" 29 = "AC" 30 = "AD" .........

Would thank for some .NET codes (C # or VB). Thanks.

+3
source share
5 answers

Here are some VBAs (with test code) that I drew together in Excel, which does the trick. If VB.NET has not changed dramatically, it should work fine. Even so, you should be able to translate the idea into workable code.

' num2col - translate Excel column number (1-n) into column string ("A"-"ZZ"). '

Function num2col(num As Integer) As String
    ' Subtract one to make modulo/divide cleaner. '

    num = num - 1

    ' Select return value based on invalid/one-char/two-char input. '

    If num < 0 Or num >= 27 * 26 Then
        ' Return special sentinel value if out of range. '

        num2col = "-"
    Else
        ' Single char, just get the letter. '

        If num < 26 Then
            num2col = Chr(num + 65)
        Else
           ' Double char, get letters based on integer divide and modulus. '

           num2col = Chr(num \ 26 + 64) + Chr(num Mod 26 + 65)
        End If
    End If
End Function

 

' Test code in Excel VBA. '

Sub main()
    MsgBox ("-  should be " & num2col(0))
    MsgBox ("A  should be " & num2col(1))
    MsgBox ("B  should be " & num2col(2))
    MsgBox ("Z  should be " & num2col(26))
    MsgBox ("AA should be " & num2col(27))
    MsgBox ("AB should be " & num2col(28))
    MsgBox ("AY should be " & num2col(51))
    MsgBox ("AZ should be " & num2col(52))
    MsgBox ("BA should be " & num2col(53))
    MsgBox ("ZY should be " & num2col(27 * 26 - 1))
    MsgBox ("ZZ should be " & num2col(27 * 26))
    MsgBox ("-  should be " & num2col(27 * 26 + 1))
End Sub
+1
source
public string ColumnNumberToLetter(int ColumnNumber)
{
    if (ColumnNumber > 26)
    {
        return ((char) (Math.Floor(((double)ColumnNumber - 1) / 26) + 64)).ToString()
               + ((char) (((ColumnNumber - 1) % 26) + 65)).ToString();
    }
    return ((char)(ColumnNumber+64)).ToString();
}
0
source

:

public static string ToExcelString(int number)
{
    if (number > 25)
    {
        int secondaryCounter = 0;
        while (number > 25)
        {
             secondaryCounter = secondaryCounter + 1;
             number = number - 25;
        }
        return ToExcelChar(number) + ToExcelChar(secondaryCounter);
    }
    else
    {
        return ToExcelChar(number)
    }
}
private const string alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private static string ToExcelChar(int number)
{
    if (number > 25 || number < 0)
    {
        throw new InvalidArgumentException("the number passed in (" + number + ") must be between the range 0-25");
    }
    return alphabet[number];
}
0

activecell.address, , , $- , .

-1

Source: https://habr.com/ru/post/1715041/


All Articles