Apoyo con código para Excel

Saludos Luis_P

Hola pues mira que ya me ha estado apoyando Luismondelo pero como me están super presionando por acá quería ver si podía adelantar algo contigo.

el problema original es que una columna con datos alfanuméricos, de mas de 135,000 registros puede tener contener caracteres texto juntos, pero necesitamos encontrar solo aquellos que juntos sean de 4 o mas, por que según esto a partir de 4 caracteres texto juntos puede ser ya una palabra clave. Entonces Luis mondelo me ayudo con un código:

Sub letras() columna = ActiveCell.Offset(0, 1).Column tope = Len(ActiveCell) Do While ActiveCell.Value <> "" For x = 1 To tope + 1 extrae = Mid(ActiveCell, x, 1) If extrae = "" And Len(lista) > 3 Then Cells(ActiveCell.Row, columna).Value = lista lista = "" columna = columna + 1 End If If Not IsNumeric(extrae) Then lista = lista & extrae End If If IsNumeric(extrae) And Len(lista) > 3 Then Cells(ActiveCell.Row, columna).Value = lista lista = "" columna = columna + 1 End If If IsNumeric(extrae) And Len(lista) < 3 Then lista = "" End If Next ActiveCell.Offset(1, 0).Select columna = ActiveCell.Offset(0, 1).Column Loop End Sub

Luego encontré unos problemas y lo modifiqué, (el código que ves ahora es ya modificado) bueno aunque no fué la gran cosa solo cambie una cosa, acá abajo te cito lo que le pregunte. (luismondelo no esta disponible por ahora por eso pido de tu apoyo)


"...Bueno pues si hace el recorrido y extrae las letras, pero todos los resultados los imprimía en la columna siguiente en la <<fila 1 >>, leyendo un poquito los manuales que hay en linea y rezándole a San Google, pues encontré útil reemplazar el numero de celda por fila activa
Antes: Cells(1, columna).Value = lista
Después: Cells(ActiveCell.Row, columna).Value = lista
Y voila! Todo bien, pero encontré una falla,
MARTINEZ119 (aquí todo bien, pues trae MARTINEZ)
ORD37730493 (auí también por que no trae nada, eso es correcto)
FNA98265CHO (aquí empieza el problema, pues trae ORDFNA, o sea revuelve el anterior)
ORD37740964 (CHOORD)
ORD37741081 (aquí bien por que no trae nada)
ORD37731881 ORDORD "

cres que me puedas ayudar un poco? Saludos y desde ya, muchas gracias!

1 Respuesta

Respuesta
1

Mmm... a ver no soy mucho de meter las manos en codigos ajenos, pero tu problema es:

Tienes una serie de datos alfanumericos en un rango X y te interesa "extraer" solo la parte de letras en aquellas cadenas que tengas minimo 4 caracteres no numericos juntos, ejemplo

As23dfr4

Asfder454r

As3dddfghu4

Resultados esperados

No aplica

Asfd

Dddfghu

¿Eso es?

asi es, posiblemente en la cadena haya dos palabras ocultas como por ejemplo

12hola1234mundo2345

ambas son de 4 o mas caracteres entonces actualmente el código lo que hace es que en una columna pone una palabra y en la siguiente columna pone la otra.

Bueno se atraviesa el fin de semana y pues espero que el autor original del código le eche una checadita a mi angustia, si gustas, esperaré a ver que me contesta :)

Te agradezco mucho por la atención. cualquier ayuda o sugerencia es gratamente bienvenida!

Prueba esto:

Los datos a evaluar estan en col A

La salida de datos es en col B

Sub extra()
Dim R As Range
Dim f As Long
Dim cadena As String
Dim i As Integer
Dim c As Integer
'4c7569735f50
f = Application.WorksheetFunction.CountA(Range("A:A"))
If f = 0 Then Exit Sub
c = 1
For Each R In Range("A1:A" & f)
For i = 1 To Len(Trim(R))
If Asc(Mid(UCase(R), i, 1)) >= 65 And Asc(Mid(UCase(R), i, 1)) <= 90 Then
cadena = cadena & Mid(R, i, 1)
Else
c = Application.WorksheetFunction.CountA(Range("B:B")) + 1
If Len(cadena) >= 4 Then Range("B" & c & ":" & "b" & c) = cadena
cadena = ""
End If
If i = Len(Trim(R)) And Len(cadena) < 4 Then cadena = ""
Next
Next
Set R = Nothing
End Sub

Vaya! esta muy bien, este código que me envías abre un montón de posibilidades, te agradezco muchísimo!!

esta pagina ya esta en mis favoritos :D

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas