Macro que extraiga números que están como texto

31/05/2016 - 17:49 por Pol | Informe spam
Hola, a todos, a ver si me pueden echar una mano con la siguiente macro.

Tras convertir una factura en PDF a EXCEL el resultado es que me quedan los datos similares a estos pero con mucho texto y números variados de cifras entre los grupos de códigos que se muestran a continuación, colocados de este modo:

COLUMNA:A B C D E F G
FILA1 Producto1 0,95 18 0,78 21 08410435051001
2 Producto2 1,69 18 1,39 21 08411660170212
3 Producto3 1,99 18 1,63 21 08411660170303
4 Producto4 1,69 18 1,39 21 08411660170234
5 Producto5 1,27 18 1,04 21 08410469200355
6
7 ENTRE GRUPO Y GRUPO HAY UNA SEPARACIÓN CON TEXTO Y NÚMEROS
8
9 Producto6 0,95 18 0,78 21 08410435051006
10 Producto7 1,69 18 1,39 21 08411660170217
11 Producto8 1,99 18 1,63 21 08411660170308
12 Producto9 1,69 18 1,39 21 08411660170239
13 Producto10 1,27 18 1,04 21 08410469200310
14
15 TEXTO... VARIADO
16
17 Producto11 0,95 18 0,78 21 08410435051011
18 Producto12 1,69 18 1,39 21 08411660170212
19 Producto13 1,99 18 1,63 21 08411660170313
20 Producto14 1,69 18 1,39 21 08411660170214
21 Producto15 1,27 18 1,04 21 08410469200315

La intención es que mediante una macro conseguir el modo que me vaya recorriendo la columna "G" que vienen siendo los códigos de los productos, y por cada código que localice (que sea un número de más de 10 cifras) copie toda la fila entera y la traslade a la hoja2 del mismo libro de modo que elimine todo el resto de datos que no sean las filas que contienen los códigos.

Está la complicación de que los números están grabados en excel como texto y por código VBA no consigo que se
conviertan en números.

He probado grabando macros para eliminar todo lo que no sean filas con códigos, pero como las facturas no son
siempre iguales, el resultado no es válido.

La cuestión es que tengo que extraer todas las filas y que me queden de este modo.

EN LA HOJA2

COLUMNA:A B C D E F G
FILA1 Producto1 0,95 18 0,78 21 08410435051001
2 Producto2 1,69 18 1,39 21 08411660170212
3 Producto3 1,99 18 1,63 21 08411660170303
4 Producto4 1,69 18 1,39 21 08411660170234
5 Producto5 1,27 18 1,04 21 08410469200355
9 Producto6 0,95 18 0,78 21 08410435051006
10 Producto7 1,69 18 1,39 21 08411660170217
11 Producto8 1,99 18 1,63 21 08411660170308
12 Producto9 1,69 18 1,39 21 08411660170239
13 Producto10 1,27 18 1,04 21 08410469200310
17 Producto11 0,95 18 0,78 21 08410435051011
18 Producto12 1,69 18 1,39 21 08411660170212
19 Producto13 1,99 18 1,63 21 08411660170313
20 Producto14 1,69 18 1,39 21 08411660170214
21 Producto15 1,27 18 1,04 21 08410469200315

He pensado utilizar el método For-Next, pero no doy con la forma de pedirle al método For que recorra la columna G, y cuando localice un número que tenga más de 10 cifras copie la fila entera y la pase a la hoja 2 situándola al final de cada fila.

Agradecería cualquier ayuda.

Muchas gracias de antemano.

Preguntas similare

Leer las respuestas

#6 Pol
09/06/2016 - 21:12 | Informe spam
Perfecto Emilio, has acertado al vuelo, es justo lo que necesito.

Un millón de gracias.






El miércoles, 8 de junio de 2016, 20:41:20 (UTC+2), Emilio escribió:
-
¡Importante!: Colabora con el grupo.Contesta a este mensaje
y dinos si te sirvió o no la respuesta dada. Muchas gracias
-
Hola!
escribo al vuelo

Dim i As Long, strLaCadena As String

strLaCadena = "00084104350510"
For i = 1 To Len(strLaCadena)
If Not Mid(strLaCadena, i, 1) = 0 Then Exit For
Next i
strLaCadena = Mid(strLaCadena, i)

Saludos a todos desde Huelva

Emilio [MS-MVP Access 2006/11]
http://www.mvp-access.com/foro
http://www.mvp-access.es/emilio
"Pol" escribió en el mensaje de
noticias:

Gracias por la aportación David, por ahora he conseguido lo que necesito, he
conseguido borrar todas las celdas sobrantes y que las filas queden todas
juntas, y luego le doy formato colocándolas como necesito, pero me queda una
cuestión, que es conseguir que los números de código, los que están en la
última columna del tipo:

08410435051011

Necesito que analice si el primer carácter (es número que está como texto),
si es igual a 0 que lo borre, pero el problema es que a veces hay más de un
cero, puede ser el número del siguiente modo:

00084104350510

En este caso habría que eliminar 3 ceros, como pueden ser de 1 a 6 ceros,
por lo que el código siguiente que es el que utilizo no sirve.


Por ahora estoy haciendo lo siguiente:

For i = 1 To Counter
' comprueba que la celda activa esté en vacía.
If ActiveCell = "" Or ActiveCell.Offset(0, 3).Value = "" Then
Selection.EntireRow.Delete
' Decrementa el contador por cada fila eliminada
Counter = Counter - 1
Else

Valor = ActiveCell.Value
resultado = Trim(Right(Valor, Len(Valor) - 1))
ActiveCell.Value = resultado
' selecciona la siguiente fila.
ActiveCell.Offset(1, 0).Select
End If

Next i


Agradecería si alguien me puede echar una mano a construir algún método que
analice si los números que están a la izquierda son ceros, que los elimine.

Gracias de antemano.
Respuesta Responder a este mensaje
#7 Emilio
09/06/2016 - 21:41 | Informe spam
:-)

Saludos a todos desde Huelva

Emilio [MS-MVP Access 2006/11]
http://www.mvp-access.com/foro
http://www.mvp-access.es/emilio
"Pol" escribió en el mensaje de
noticias:

Perfecto Emilio, has acertado al vuelo, es justo lo que necesito.

Un millón de gracias.






El miércoles, 8 de junio de 2016, 20:41:20 (UTC+2), Emilio escribió:
-
¡Importante!: Colabora con el grupo.Contesta a este mensaje
y dinos si te sirvió o no la respuesta dada. Muchas gracias
-
Hola!
escribo al vuelo

Dim i As Long, strLaCadena As String

strLaCadena = "00084104350510"
For i = 1 To Len(strLaCadena)
If Not Mid(strLaCadena, i, 1) = 0 Then Exit For
Next i
strLaCadena = Mid(strLaCadena, i)

Saludos a todos desde Huelva

Emilio [MS-MVP Access 2006/11]
http://www.mvp-access.com/foro
http://www.mvp-access.es/emilio
"Pol" escribió en el mensaje de
noticias:

Gracias por la aportación David, por ahora he conseguido lo que necesito,
he
conseguido borrar todas las celdas sobrantes y que las filas queden todas
juntas, y luego le doy formato colocándolas como necesito, pero me queda
una
cuestión, que es conseguir que los números de código, los que están en la
última columna del tipo:

08410435051011

Necesito que analice si el primer carácter (es número que está como
texto),
si es igual a 0 que lo borre, pero el problema es que a veces hay más de
un
cero, puede ser el número del siguiente modo:

00084104350510

En este caso habría que eliminar 3 ceros, como pueden ser de 1 a 6 ceros,
por lo que el código siguiente que es el que utilizo no sirve.


Por ahora estoy haciendo lo siguiente:

For i = 1 To Counter
' comprueba que la celda activa esté en vacía.
If ActiveCell = "" Or ActiveCell.Offset(0, 3).Value = "" Then
Selection.EntireRow.Delete
' Decrementa el contador por cada fila eliminada
Counter = Counter - 1
Else

Valor = ActiveCell.Value
resultado = Trim(Right(Valor, Len(Valor) - 1))
ActiveCell.Value = resultado
' selecciona la siguiente fila.
ActiveCell.Offset(1, 0).Select
End If

Next i


Agradecería si alguien me puede echar una mano a construir algún método
que
analice si los números que están a la izquierda son ceros, que los
elimine.

Gracias de antemano.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida