Jump to content
Sign in to follow this  
Enigma25

Separar texto-numero

Recommended Posts

disculpa la molestia nuevamente tengo una consulta si pones letras, luego numero, luego letras juntas como por ejemplo itzy19alonso81 el resultado fuera itzy alonso con espacion enmedio y 19 81 con espacion enmedio tambien pordia realizar esa determinacion cuando se diera ese caso? nuevamente gracias por el aporte

Share this post


Link to post
Share on other sites
Buenas noches

De un tema en el foro "Macros y Programación VBA" :Pendiente - Normalizacion, en el cual solicitaban la separación de texto y números en las columnas respectivas. Les dejo el archivo con su código para su uso si lo ven apropiado

Saludos.

Un sencillo y basico aporte de como procesar cadenas caracter a caracter! Pero con 30000 cadenas a procesar se vuelve sumamente lento, tardo mas de 40 segundos en mi laptop. Asi que me tomo la libertad de hacer unas mejoras:


Sub VersionEnigma25Optimizada()
Dim Uf As Long
Dim I As Long 'se cambia a long ya que para mas de 32655 datos dara error
Dim A As Integer
Dim Num As String
Dim Texto As String
Dim Cad As String
Dim Car As String

Uf = Hoja1.Range("A" & Rows.Count).End(xlUp).Row + 1
For I = 2 To Uf
Num = ""
Cad = ""
Texto = Hoja1.Cells(I, 1)
For A = 1 To Len(Texto)
Car = Mid(Texto, A, 1)
If IsNumeric(Car) Then
Num = Num & Car
Else
Cad = Cad & Car
End If
Next

'aqui solo se escribe una vez el resultado al terminar de parsear la cadena
Hoja1.Cells(I, 2) = Replace(Cad, "ALA. ", "")
Hoja1.Cells(I, 3) = Num
Next
End Sub
[/CODE]

Con esta mejora la ejecución solo toma menos de 10 segundos. Para todos los principiantes: Cuando se usan iteradores (bucles, loops, ciclos, etc...) y dentro hay asignaciones y comparaciones, estas le toman cierto tiempo al procesador ejecutarla. Suponiendo que tenemos un for y dentro del mismo hay una asignacion como a=a+1 y este se repite 1000 veces y dicha asignacion le tomara 1 seg al procesador, el for tardaria 1000 segundos en ejecutarse (claro es ejemplo exagerado), pero entre menos asignaciones y comparaciones halla mucho mejor! Otro punto una asignacion le toma mas tiempo al procesador que una comparacion.

Saludos!

Share this post


Link to post
Share on other sites

Ah! por cierto para este tipo de procesamiento de texto u otro mas complejo se suele hacer uso de expresiones regulares lo cual es mucho mas potente que usar las funciones de texto de VBA.

Si se instalan el omplemento: MXUtilities

https://www.ayudaexcel.com/foro/threads/mxutilites-ver-1-4.40294/

podran hacer uso de una funcion llamada: ExtraerPatron, la cual podrian usar asi:

=ExtraerPatron(A2,"\d+")[/CODE]

con lo cual se podrian extrae todos los numeros consecutivos.

Share this post


Link to post
Share on other sites
Sign in to follow this  

×
×
  • Create New...

Important Information

Privacy Policy

Ayuda Excel - Madrid, Madrid, ES - Valorada por 5112 personas - Aprender Excel - Total: 4.7 / 5