Obtener la letra de una columna VBA Excel

Algunas veces queremos saber la letra o nombre de la columna pero solo sabemos el numero de la columna es decir solo sabemos que es la columna número 100 pero queremos saber que nombre o letra tiene, para eso hay una forma fácil de saber la letra de dicha columna a partir del número de columna y es con la siguiente función

Function NombreColumna(NumeroColumna As Long) As String
    Dim Max As Integer
    Max = ActiveSheet.Range("1:1").Columns.Count
    If NumeroColumna <= Max And NumeroColumna > 0 Then
        NombreColumna = Mid(ActiveSheet.Cells(1, NumeroColumna).Address, 2, InStr(2, ActiveSheet.Cells(1, NumeroColumna).Address, "$") - 2)
    Else
        MsgBox "Debe Ingresar un Número de Columna Entre 1 y " & Max
    End If
End Function


Esta función se debe colocar en un Módulo, en caso de que el numero no corresponda a una columna muestra un mensaje indicando el rango permitido. La función debe llamarse de la siguiente forma

Dim NombreCol As String
NombreCol=NombreColumna(15)
Msgbox NombreCol

Este código muestra el nombre de la columna número 15.

Saber si un nombre de rango ya existe

Cuando trabajamos con VBA (Macros) y Excel por lo general asignamos nombres a los rangos para facilitarnos la lectura y escritura de formulas o código VBA y en ocasiones cuando recorremos las hojas por medios de VBA necesitamos saber si en alguna hoja tenemos definido un nombre de rango especifico ya que cuando hacemos referencia a un nombre de rango en una hoja en el que no existe dicho nombre de rango ocurrirá un error. Para solucionar esto hay varios códigos en VBA que nos ayudaran a evitar esos errores.
La primera forma es con una función de Excel llamada «ISREF» o «ESREF» en ingles y español respectivamente. Lo que hace esta función es devolver verdadero cuando el rango existe y falso cuando no existe. Ejemplo:

For i=1 To Thisworkbook.Sheets.Count
   If Application.Evaluate("ISREF(" & Thisworkbook.Sheets(i).Name & "!Fecha)")=True Then
       Thisworkbook.Sheets(i).Range("Fecha")=Now
   End If
Next

Este código recorre todas las hojas del libro actual y asigna la fecha actual al rango «Fecha» de cada hoja siempre que el rango exista en la hoja.
La desventaja que tiene esta forma de comprobar si existe un rango en una hoja determinada es que solo funciona para nombres de rango de ámbito de hoja y si no existe un rango con ámbito libro con el mismo nombre, es decir si en el ejemplo anterior hubiera un nombre de rango de ámbito libro llamado «Fecha» el código siempre devolvería verdadero ya que Excel automáticamente al no encontrar el nombre de rango en la hoja especificada busca si existe el rango en el ámbito libro y si lo encuentra devuelve verdadero.
La segunda forma es con esta función.

Function ExisteRango(Hoja As String, NombreRango As String) As Boolean
   On Error Resume Next
   Dim valor As String
   Err.Clear
   valor = ThisWorkbook.Sheets(Hoja).Range(NombreRango)
   If Err.Description <> "" Then
      ExisteRango = False
   Else
      ExisteRango = True
   End If
End Function

Esta función intenta asignar el valor del rango especificado a una variable, si ocurre un error entonces asume que el rango no existe aunque también puede significar que la hoja no existe.
Para utilizar esta función en el primer ejemplo seria de la siguiente forma.

For i=1 To Thisworkbook.Sheets.Count
   If ExisteRango(Thisworkbook.Sheets(i).Name,"Fecha")=True Then
      Thisworkbook.Sheets(i).Range("Fecha")=Now
   End If
Next
 

Una tercera forma es con la siguiente función

Function ExisteRango(Hoja As String, NombreRango As String) As Boolean
   On Error Resume Next
   Dim i As Integer
   For i = 1 To ThisWorkbook.Sheets(Hoja).Names.Count
      If (ThisWorkbook.Sheets(Hoja).Names(i).Name = Hoja & "!" & NombreRango) Or (ThisWorkbook.Sheets(Hoja).Names(i).Name = "'" & Hoja & "'!" & NombreRango) Then
         ExisteRango = True
         Exit For
      End If
   Next
End Function

Esta función recorre los nombres de rango de la hoja especificada y los compara con el nombre que estamos buscando, si lo encuentra devuelve verdadero y si no falso.
Para aplicar esta función seria igual que en la anterior.

For i=1 To Thisworkbook.Sheets.Count
   If ExisteRango(Thisworkbook.Sheets(i).Name,"Fecha")=True Then
      Thisworkbook.Sheets(i).Range("Fecha")=Now
   End If
Next

Estas son tres formas en que se puede saber si un nombre de rango existe o no en una hoja especifica de Excel.