Excel - comparando valores

 
Vista:

comparando valores

Publicado por rbate (18 intervenciones) el 17/02/2007 20:18:44
Hola a todos!

Alguien me puede decir por qué no funciona este código. ¿Qué tengo mal?

La intención es comparar todas las celdas de la A con la que está por encima de ella (ya me he asegurado antes de ejecutar la macro de que todas las celdas esten ordenadas por la columna A) y en caso de que sean iguales, seleccione la celda y borre todo el contenido de la fila en la que está.

Sub comparar()

j = 1
For i = 2 To 10

If Cells(j, i).Value = Cells(j, i - 1).Value Then

For j = 1 To 200
Range(j, i).Select
Range(j, i).Value = ""
Next j

End If

Next i

End Sub

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:comparando valores

Publicado por José Luis (700 intervenciones) el 17/02/2007 21:28:27
j = 1
'Bucle de Filas 2 a 10 con la columna 1.
For i = 2 To 10
If Cells(j, i).Value = Cells(j, i - 1).Value Then

'Si son iguales borras las columnas A ... 200 (1-200) borras la línea
For j = 1 To 200
Range(j, i).Select
Range(j, i).Value = ""
Next j

End If
'Volver al bucle i (¿y "J" qué valor tiene? Pues 201. This the kagada.
Next i

Una solución entre tantas de las que puede haber ...

'Fijar el valor de la columna a 1
For i = 2 To 10
If Cells(1, i).Value = Cells(1, i - 1).Value Then
For j = 1 To 200
Range(j, i).Select
Range(j, i).Value = ""
Next j
End If
Next i

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:comparando valores

Publicado por rbate (7 intervenciones) el 17/02/2007 23:09:45
¿Y si quisiera eliminar la fila de la primera de las dos celdas que coinciden (1, i - 1)?

Seria asi?

'Fijar el valor de la columna a 1
For i = 2 To 10
If Cells(1, i).Value = Cells(1, i - 1).Value Then
For j = 1 To 200
Range(j, i - 1).Select
Range(j, i - 1).Value = ""
Next j
End If
Next i
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

una ayuda mas

Publicado por rbate (7 intervenciones) el 18/02/2007 13:08:46
Gracias por la solución José Luis, finalmente he utilizado esta:

For i = 6 To 400
If Cells(i, 1).Value = Cells(i - 1, 1).Value Then
For j = 1 To 173
Cells(i - 1, j).Select
Cells(i - 1, j).Value = ""
Next j
End If
Next i

Que funciona perfectamentte, pero para maximizar el rendimiento, necesito que si encuentra una celda vacia en su recorrido desde la fila 6 a la 400 salga del bucle, porque sino siempre evalua todo el ciclo aunque las ultimas 200 esten vacias. Solo es por cuestion de tiempo. Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:una ayuda mas

Publicado por JuanC (792 intervenciones) el 18/02/2007 23:36:34
Para optimizar te conviene usar un bucle
for each ... in ... next en lugar del for ... next convencional

ejemplo:
Dim cell As Range

For Each cell In Range("A1:A100)
With cell
If .Value = "algo" Then
...
Else
.Value = ""
End If
End With
Next

Set cell = Nothing

Saludos desde Baires, JuanC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:una ayuda mas

Publicado por José Luis (700 intervenciones) el 20/02/2007 08:42:04
La solución de JuanC es estupenda.
Siento no haber respondido antes, pero he estado de viaje y hasta el Jueves 29 tampoco estaré disponible.
Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar