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.
¡¡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