Es una cuestión complicada y necesito ayuda

05/03/2008 - 23:18 por fali | Informe spam
Hola a todos¡
Los datos de los que dispongo para cada celda y por fila son como los
siguientes:

A1: PR12345ANGEL(NON) PEREZ,A LUY,G

B1:XS76543LOPEZ(LOP) LEA,G

C1: PR12345ANGEL(NON) PEREZ,A LUY,G

Necesito quitar los registros que estén duplicados (y las celdas en blanco
si es posible) por filas, en este caso coinciden la A1 y la C1 y sólo quiero
contarla una vez. Tengo muchísimas filas (más de 3000) y alrededor de 200
columnas.
Gracias de antemano por vuestra ayuda

Preguntas similare

Leer las respuestas

#1 Ivan
06/03/2008 - 00:39 | Informe spam
hola,

Necesito quitar los registros que estén duplicados (y las celdas en blanco
si es posible) por filas, en este caso coinciden la A1 y la C1 y sólo quiero
contarla una vez. Tengo muchísimas filas (más de 3000) y alrededor de 200
columnas.



aunque no estoy seguro de lo que puede tardar (en mis pruebas, con
aprox. 160 columnas y 2500 filas, tarda menos de un minuto con entre 5
y 20 datos unicos como los tuyos por fila), pues dependera bastante de
tus datos reales y del numero de repeticiones, pero no creo que te
tarde mas de unos minutos,

prueba esta macro con la hoja con la lista como activa (te creara una
nueva hoja con los unicos por fila)

pegalo en un modulo 'normal' . Por si no sabes como => en el editor de
VBA [Alt+F11] => menu 'Insertar' => 'Modulo' a secas, NO de clase, =>
en la ventana que se te abre pega este codigo =>

Sub FilasUnicas()
Dim f As Long, c As Integer, hj As String
hj = ActiveSheet.Name
Application.ScreenUpdating = False
Worksheets.Add
With Worksheets(hj)
For f = 1 To .Cells(65536, 1).End(xlUp).Row
.Cells(f, 1).Copy Cells(f, 1)
For c = 1 To .Cells(f, 256).End(xlToLeft).Column
If Application.CountIf(Rows(f), .Cells(f, c).Value) = 0 Then _
.Cells(f, c).Copy Cells(f, 256).End(xlToLeft).Offset(, 1)
Next
Next
End With
Columns.AutoFit
End Sub

vuelve a Excel y ejecuta la macro con la hoja como activa. Puedes
ejecutarlo dese el cuadro macros( => menu Herramientas => Macro => Ver
macros, o directamente => Alt+F8 => seleccionas la macro y ejecutas)

mira a ver si te vale. Como te digo puede tardar un poco, pero ten
paciencia, no creo que tarde mas de 2 o 3 minutos, y dependiendo de
tus datos quizas mucho menos.

de todas formas puede que haya formas mas rapidas pero con lo que
expones creo que todas demorrarian un poco

un saludo
Ivan
Respuesta Responder a este mensaje
#2 Ivan
06/03/2008 - 01:31 | Informe spam
hola de nuevo,

prueba mejor este. El otro te dejaba posibles celdas vacias en la 1ª
columna

en mis nuevas pruebas tarda 45 segundos aprox. con 250 columnas y 2500
filas aprox

OJO: se supone que no hay filas completamente vacias entre medias y
que tu lista empieza en A1

Sub FilasUnicas()
Dim f As Long, c As Integer, hj As String, _
tiempo, nc As Integer
hj = ActiveSheet.Name: tiempo = Timer
Application.ScreenUpdating = False
Worksheets.Add
With Worksheets(hj)
.Columns(1).Copy Range("a1")
For f = 1 To .[a1].CurrentRegion.Rows.Count
If Cells(f, 1) = "" Then nc = 1 Else nc = 2
For c = 1 To .Cells(f, 256).End(xlToLeft).Column
If Application.CountIf(Range(Cells(f, 1), _
Cells(f, nc)), .Cells(f, c).Value) = 0 Then
.Cells(f, c).Copy Cells(f, nc)
nc = Cells(f, 256).End(xlToLeft).Column + 1
End If
Next
Next
End With
Columns.AutoFit
tiempo = Timer - tiempo
MsgBox tiempo
End Sub

un saludo
Ivan

PD: la variable tiempo y las instrucciones que la usan puedes
quitarlas, son solo para ver lo que tarda
Respuesta Responder a este mensaje
#3 fali
06/03/2008 - 11:42 | Informe spam
Hola Iván, antes de nada muchas gracias.
No me funciona ninguna de las dos macros que me has enviado me sale un
mensaje : error 13 tiempo de ejecución no coinciden los tipos. Me crea una
hoja nueva donde aparecen las no repetidas pero sólo hasta la fila 29, a
partir de esa fila sólo aparece un dato por fila. ¿puedes ayudarme a
solucionarlo?
Gracias de nuevo y un saludo
"Ivan" wrote:

hola de nuevo,

prueba mejor este. El otro te dejaba posibles celdas vacias en la 1ª
columna

en mis nuevas pruebas tarda 45 segundos aprox. con 250 columnas y 2500
filas aprox

OJO: se supone que no hay filas completamente vacias entre medias y
que tu lista empieza en A1

Sub FilasUnicas()
Dim f As Long, c As Integer, hj As String, _
tiempo, nc As Integer
hj = ActiveSheet.Name: tiempo = Timer
Application.ScreenUpdating = False
Worksheets.Add
With Worksheets(hj)
.Columns(1).Copy Range("a1")
For f = 1 To .[a1].CurrentRegion.Rows.Count
If Cells(f, 1) = "" Then nc = 1 Else nc = 2
For c = 1 To .Cells(f, 256).End(xlToLeft).Column
If Application.CountIf(Range(Cells(f, 1), _
Cells(f, nc)), .Cells(f, c).Value) = 0 Then
.Cells(f, c).Copy Cells(f, nc)
nc = Cells(f, 256).End(xlToLeft).Column + 1
End If
Next
Next
End With
Columns.AutoFit
tiempo = Timer - tiempo
MsgBox tiempo
End Sub

un saludo
Ivan

PD: la variable tiempo y las instrucciones que la usan puedes
quitarlas, son solo para ver lo que tarda

Respuesta Responder a este mensaje
#4 Ivan
06/03/2008 - 13:24 | Informe spam
hola,

... me sale un




mensaje : error 13 tiempo de ejecución no coinciden los tipos. ... <<<



¿que parte del codigo te marca cuando te da el error? si puedes,
indicanoslo

... Me crea una




hoja nueva donde aparecen las no repetidas  pero sólo hasta la fila 29, a
partir de esa fila sólo aparece un dato por fila ... <<<



a mi me funciona bien con diversas combinaciones.

De momento lo unico que se me ocurre es que tengas 'CELDAS
COMBINADAS' (al menos en la fila 30 ).

Comprueba si es asi y lo comentas. Incluso si puedes,EN UNA COPIA DE
LA LISTA [<=¡¡¡OJO!!!], selecciona toda la hoja y prueba a darle al
boton de (des)combinar celdas y, salvo que se te haya combinado toda
la hoja (horror), vuelve a ejecutar la macro a ver que tal

entre tanto en cuanto pueda lo miro con calma, y si a alguien se le
ocurre que el problema puede venir por otro lado, bienvenido sea

un saludo
Ivan
Respuesta Responder a este mensaje
#5 fali
07/03/2008 - 16:42 | Informe spam
Hola Iván:
Cuando sale el error 13 tiempo de ejecución no coinciden los tipos, aparecen
unos botones con Finalizar, Depurar y Cancelar. Si le doy a depurar se va al
módulo de la macro y se pone en amarillo el contenido If.
Por otro lado, lo que comentas de descombinar celdas ¿es la opción de
separar celdas? Con esta última opción lo he intentado pero el resultado es
el mismo.
Tengo que decirte que los datos de mis celdas los he obtenido aplicando la
opción de Concatenar , y no sé si ahí puede estar el problema. Me explico
Mis datos son por ej.

A1: PR12345-X2 ANGEL(NON) PEREZ,A LUY,G

B1:XS76543-C4 LOPEZ(LOP) LEA,G

C1: PR12345-W3 ANGEL(NON) PEREZ,A LUY,G

yo quiero que me identifique que la A1 y la C1 son iguales (no me importa
que varíe en -X2 y -W3) y me deje sólo una. Entonces se me ocurrió quitarle
la terminación y claro luego tuve que unir las celdas con concatenar y me
quedan los datos tal como :

A1: PR12345ANGEL(NON) PEREZ,A LUY,G

B1:XS76543LOPEZ(LOP) LEA,G

C1: PR12345ANGEL(NON) PEREZ,A LUY,G

Y a estos datos estoy aplicando la macro.
Supongo que en estas operaciones estará el problema. Si puedes ayudarme te
lo agradecería.
Gracias por tu interés.
Saludos


"Ivan" wrote:

hola,

>>> ... me sale un
> mensaje : error 13 tiempo de ejecución no coinciden los tipos. ... <<<

¿que parte del codigo te marca cuando te da el error? si puedes,
indicanoslo

>>> ... Me crea una
> hoja nueva donde aparecen las no repetidas pero sólo hasta la fila 29, a
> partir de esa fila sólo aparece un dato por fila ... <<<

a mi me funciona bien con diversas combinaciones.

De momento lo unico que se me ocurre es que tengas 'CELDAS
COMBINADAS' (al menos en la fila 30 ).

Comprueba si es asi y lo comentas. Incluso si puedes,EN UNA COPIA DE
LA LISTA [<=¡¡¡OJO!!!], selecciona toda la hoja y prueba a darle al
boton de (des)combinar celdas y, salvo que se te haya combinado toda
la hoja (horror), vuelve a ejecutar la macro a ver que tal

entre tanto en cuanto pueda lo miro con calma, y si a alguien se le
ocurre que el problema puede venir por otro lado, bienvenido sea

un saludo
Ivan

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida