Función dinámica que retorne letras de celdas

Nnecesito hacer una función dinámica para que me retorne las letras de las celdas y otra al revés.
Ejemplo:
NumeroALetra LetraANumero
1 = A                 |   A = 1
2 = B                 |   B = 2
..                         ..
Estás funciones me sirven, pero quiero que en forma dinámica se vaya creando el Case y la Letra, sabiendo que son las letras de las celdas de una planilla excel. (Teniendo un limite razonable como hasta AC aprox)
Function NumeroALetra(ByVal Numeri As Integer) As String
    Select Case Numeri
        Case 1
            NumeroALetra = "A"
        Case 2
            NumeroALetra = "B"
        Case 3
            NumeroALetra = "C"
        Case 4
            NumeroALetra = "D"
        Case 5
            NumeroALetra = "E"
        Case 6
            NumeroALetra = "F"
        Case 7
            NumeroALetra = "G"
        Case 8
            NumeroALetra = "H"
        Case 9
            NumeroALetra = "I"
        Case 10
            NumeroALetra = "J"
            'etc....
    End Select
End Function
Lo mismo, pero al revés.
Function LetraANumero(ByVal letra As String) As Integer
    Select Case letra
        Case "A"
            LetraANumero = 1
        Case "B"
             LetraANumero = 2
        Case "C"
             LetraANumero = 3
        Case "D"
             LetraANumero = 4
        Case "E"
             LetraANumero = 5
        Case "F"
             LetraANumero = 6
        Case "G"
             LetraANumero = 7
        Case "H"
             LetraANumero = 8
        Case "I"
             LetraANumero = 9
        Case "J"
          LetraANumero = 10
               Case "K"
          LetraANumero = 11
               Case "L"
          LetraANumero = 12
               Case "M"
          LetraANumero = 13
               Case "Ñ"
          LetraANumero = 14
            'etc....
    End Select
End Function
Gracias!

1 respuesta

Respuesta
1
No se si lo he entendido bien, ¿quieres hacer una función para saber que celda es por ejemplo la AA te devuelve un 27 y si haces lo mismo con el 27 te ha de salir la AA? Si es así hay una forma más fácil que hacer todos los select
Public Function LetraANumero(letra As String) As Integer
    For i = 1 To Len(letra)
        LetraANumero = LetraANumero + 26 ^ (Len(letra) - i) * lton(Mid$(letra, i, 1))
    Next i
End Function
Private Function lton(car As String) As Integer
    lton = Asc(car) - 64
End Function
Public Function NumeroALetra(Numeri As Double) As String
    Dim letras(3) As Integer
    Dim div As Double
    Dim i As Integer
    i = 1
    While (Numeri > 26)
        div = Numeri / 26
        letras(i) = (div - Int(div)) * 26
        Numeri = Numeri / 26
        i = i + 1
    Wend
    letras(i) = Int(Numeri)
    i = 1
    While (i < 4)
        NumeroALetra = NumeroALetra + CStr(Chr$(letras(i) + 64))
        'Chr$ (Numeri + 64) 'Para mayusculas, para minúsculas es el 96
        i = i + 1
    Wend
End Function

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas