Jump to content

Función que devuelva la referencia de la columna


Recommended Posts

Hola a todos,

 

Me gustaría preguntar si alguien tiene desarrollada una función tal que cuando el usuario introduzca un número cualquiera, entonces la función devuelva la referencia de la columna asociada a ese número.

Algo así, por ejemplo:

 

Function ReferenciarColumnas(numero As Integer) As String

Application.ScreenUpdating = False

   ' Limpiamos los errores anteriores (por si acaso)...
   Err.Clear

   ' Tratamos los errores de la función...
   On Error Resume Next

   ' Si el número introducido no es válido, entonces...
   If numero <= 0 Or numero > 16384 Then
      ' Notificamos al usuario con un mensaje de error...
      MsgBox "El número introducido no es válido." & vbCr & _
             "Por favor, el número introducido debe estar comprendido entre los valores 1 y 16384."
   ' En caso contrario...
   Else
      ' Notificamos al usuario con un mensaje de confirmación...
      MsgBox Chr(numero + 64)
   End If

End Function

 

El problema es cuando el usuario introduce un valor superior a 26, ya que supera la letra "Z".

Y habría que empezar otra vez desde la columna "A", pero añadiéndole la siguiente letra al final.

Es decir,

Número: 27 ---> Columna: AA

Número: 28 ---> Columna: AB

Número: 29 ---> Columna: AC

... y así sucesivamente, hasta llegar a la columna XFD.

 

Esta es la típica función que ya está desarrollada.

Por eso, pregunto por el foro a ver si alguien se anima a compartirla conmigo.

 

Gracias por vuestro tiempo.

Edited by paikerr
Link to comment
Share on other sites

En 23/7/2021 at 17:46 , Antoni dijo:
letras = Split(Columns(número).Address, "$")(2)

 

Gracias @Antoni.

 

Así quedaría definida la función (por si a alguien le interesa):

Function ReferenciarColumnas(numero As Integer) As String

Application.ScreenUpdating = False

   ' Tratamos los errores de la función...
   On Error Resume Next

   ' Declaramos las variables de ámbito local...
   Dim letras As Variant
   letras = Split(ThisWorkbook.ActiveSheet.Columns(numero).Address, "$")

   ' Si el número introducido no es válido, entonces...
   If numero <= 0 Or numero > 16384 Then
      ' Notificamos al usuario con un mensaje de error...
      MsgBox Prompt:="Upps, parece que hubo un error... Por favor, el número introducido debe estar " & _
                     "comprendido entre los valores 1 y 16384.", _
             Title:="NUMERO INCORRECTO"
   ' En caso contrario...
   Else
      ' Referenciamos el número de columna...
      ReferenciarColumnas = letras(2)
   End If

End Function

 

Saludos.

Link to comment
Share on other sites

  • Crear macros Excel

  • Posts

    • =ELEGIR(F20,7500,5000,5000,3500,3500,3500,2500,2500,2500,2500,2500,1500) Espero te sirva  
    • ya te di acceso,me parecio raro que no pudieras entrar pero ya deberias entrar,hace mucho que me suscribi a esta pagina y simpre pude subir mi archivo de ejemplo,pero ahora me doy cuenta que si no pago una tarifa de membresia no podre subir ejemplos para que puedan prestar su ayuda 
    • ya te di acceso,me parecio raro que no pudieras entrar pero ya deberias entrar
    • Coloca esta subrutina y el resultado lo pondrá en la Hoja Principal "E15" hacia abajo... Saludos   Sub concatena()     Set DATOS = Worksheets("Verificar Matriz")     Sheets("principal").Select     Range("E15:E5000").ClearContents     rt = 5     RD = 6     RS = 15     Do While DATOS.Cells(RD, 4) <> ""         pasa = 0         For C = 5 To 22             If DATOS.Cells(RD, C) <> "0" Then                 pasa = pasa + 1             End If         Next         If pasa > 0 Then             CADENA = ""             For C = 5 To 22                 If DATOS.Cells(RD, C) > 0 Then                     If Len(CADENA) > 0 Then                         CADENA = CADENA & ","                     End If                     CADENA = CADENA & C - 4 & "-" & DATOS.Cells(rt, C) & "=" & Chr(34) & DATOS.Cells(RD, C) & Chr(34)                 End If             Next             Cells(RS, "E") = CADENA             RS = RS + 1         End If         RD = RD + 1     Loop End Sub  
  • Recently Browsing

    No registered users viewing this page.

×
×
  • Create New...

Important Information

Privacy Policy