Saltar al contenido

Separar texto-numero


Enigma25

Recommended Posts

publicado

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.

publicado

excelente aporte hermano vba, de casualidad si no es una molestia como traducirias ese codigo usando un texbox en lugar de celdas? si no es mucha molestia podes ilustrarme un ejemplo gracias

publicado

.

Si la parte numérica está a la izquierda de la cadena

Número = Val(Cadena)
Texto = Mid(Cadena, Len(Número) + 1)[/CODE]

.

publicado

Mis respetos [uSER=46507]@Macro Antonio[/uSER]

Gracias, aunque igual funciona teniendo el numero en la izquierda de los textos:

post-98799-145877016612_thumb.png

publicado

hermano q nivel vba , gracias por tener su tiempo, yo soy nuevo en esto, ese detalle ya dias queria implementa en mis archivos, es un gran aporte nuevamente gracias

publicado

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

publicado

mantengan una separacion ejemplo pegado. itzy19alonso81 cuando le click el resultado en texto sea itzy alonso con el espacio intercalado antes de la union igual los numeros 19 81

  • 1 month later...
publicado

Amigo [uSER=98799]@Enigma25[/uSER] , grandísimo nivel de VBA. Muy interesante el aporte.

slu2. Hugo. España

publicado
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!

publicado

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.

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.