Hola a todos!:

Llevaba varias semanas de vacaciones y ya estaba con muchas ganas de volver a publicar contenidos en Excel Signum.

En este post os propongo programar la función replace en VBA para crear una UDF que nos permita eliminar los números o las letras (según necesidad) de una cadena alfanumérica.

Vamos a utilizar el contenido de todas estas celdas para realizar el ejemplo:

Si deseamos pasar a una celda únicamente las letras que componen la cadena utilizaremos el siguiente código:

Option Explicit
Function F_Letras(ByVal Target As Range)
    'Declaramos variables
    Dim oDic        As Object
    Dim sCadena     As String, MiArray As Variant
    Dim celda       As Variant, numero As Variant
    With Sheets("Hoja1")
        'Componemos string con el rango seleccionado
        For Each celda In Target
            If celda <> vbNullString Then
                sCadena = sCadena & "" & celda
            End If
        Next celda
        'Creamos array con numeros del 0 al 9
        MiArray = Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "0")
        'Eliminamos números en cadena
        For Each numero In MiArray
            sCadena = Replace(sCadena, numero, "")
        Next
        'Pasamos resultado a función
        F_Letras = sCadena
    End With
End Function

Como podéis observar lo que estamos haciendo es incluir en un array todos los números del 0 al 9 para después mediante un procedimiento for-each reemplazar por nada (eliminar) ese número y conservar sólo las letras.

El resultado de la función será: aQqQaKGfsIzHitfChcdkANdxlmMMmhEOuV

Si por el contrario, lo que queremos es mostrar solo los números, utilizaremos esta función:

Function F_Numeros(ByVal Target As Range)
    'Declaramos variables
    Dim oDic        As Object
    Dim sCadena     As String, MiArray As Variant
    Dim celda       As Variant, numero As Variant
    With Sheets("Hoja1")
        'Componemos string con el rango seleccionado
        For Each celda In Target
            If celda <> vbNullString Then
                sCadena = sCadena & "" & celda
            End If
        Next celda
        'Creamos array con el abecedario
        MiArray = Split(StrConv("ABCDEFGHIJKLMNÑOPQRSTUVWXYZ", vbUnicode), vbNullChar)
        'Eliminamos números en cadena
        For Each numero In MiArray
            sCadena = Replace(LCase(sCadena), LCase(numero), "")
        Next
        'Pasamos resultado a función
        F_Numeros = sCadena
    End With
End Function

Y utilizamos el mismo procedimiento pero con el abecedario y obteniendo el siguiente resultado: 91439356759835

En la imagen podéis ver el resultado de aplicar ambas funciones (UDF) creadas específicamente para cada ejercicio y utilizando la función replace será más eficiente que utilizar otros métodos.

Descarga el archivo pulsando en:

¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!

Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies

Comparte este post