Macro que compare celdas

He estado al tanto de todos sus consejos, pero no encuentro una soluciona un problema q tengo.

Tengo una lista de datos de mas de 5000 lineas (hoja1) en la que deseo comparar dos celdas ubicadas en la misma columna, si el valor entre ellas es "0" que copie toda la linea, a donde pertenecen esos valores y los copie en otra hoja del mismo libro, elimine la linea, y continué hasta descartar todas las lineas posibles.

Ej. Resultado

Hoja 1 Hoja 2

A B C D E F G A B C D E F G

1.1 a b a-1 -1 g n 1.1 a b a-1 -1 g n

1.7 e y d-1 -2 e n 1.5 c d d-1 1 c n

1.5 c d d-1 1 c n

En este caso los valores a evaluar están en la columna E.

Y el resultado debe ser como el de la derecha.

1 Respuesta

Respuesta
1

Sube tu archivo desde http://programarexcel.com/p/contacto.html especifica que es lo que necesitas exactamente, pon ejemplos de los resultados que deberías obtener y donde deberían copiarse.

Leyendo tu pregunta no se entiende que celdas comparar la primera con las 5000 celdas luego la segunda con las 5000 celdas y la anterior a ella, o de pares es decir la primera y segunda, la tercera y cuarta, en fin específica, sube el archivo y te lo envío con la solución.

Fijate en ese ejemplo, puedes extraer algo útil te aconsejo adaptarlo con otros ejemplos que hay en la página

http://www.programarexcel.com/2013/08/recorre-fila-buscando-y-comparando.html

http://www.programarexcel.com/2013/09/recorre-filas-agrega-numero-de-fila-en.html

http://www.programarexcel.com/2013/09/recorre-filas-agrega-numero-de-fila-en.html

http://www.programarexcel.com/2013/04/macro-extrae-datos-en-base-criterios-y.html

En http://programarexcel.com encontrarás ejemplos de macros que puedes descargar y adaptar a tus necesidades

Ya le envie el archivo.

Tal vez como aclaración adicional.

La Macro q necesito es una que lea la primera celda de la tabla en la columna "E" (por ejemplo q es donde están los valores de, luego busque en esa misma columna un valor q sumado al anterior de como resultado 0, luego copie ambas filas donde pertenecen esos valores y los copie en la hoja siguiente. Elimine las filas en blanco y repita el proceso.

Lea la primera celda del la columna "E" busque en la misma columna un valor q sumado al que acaba de leer de 0, cuando lo encuentra copie ambas lineas completamente y las copie en la hoja siguiente.

Si cuando lee una valor no encuentra valor q sumado con el anterior cumpla la condición, puede copiar esa fila en una tercera hoja de "descartados".

Y asi hasta terminar de revisar toda la lista y no queden valores disponibles.

Espero me comprendan.

Ahí tienes un ejemplo a medida. Solo debes copiar y pegar

http://www.programarexcel.com/2013/10/compara-filas-misma-columna-copia-datos.html

El código es el siguiente

Sub comparafilas()
Dim fila, fila1, filaev, filade, contá, dato1, dato2, ncol As Integer
Dim col As String
fila = 2
fila1 = 3
filaev = 2
filade = 2
contá = 0
col = InputBox(Chr(10) & Chr(10) & "Introduzca columna a evaluar, ej A, B, C, etc.")
col = col & "1"
ncol = Range(col).Column
While Sheets("Original").Cells(fila1, ncol) <> Empty
dato1 = Sheets("Original").Cells(fila, ncol).Value
While Sheets("Original").Cells(fila1, ncol) <> Empty And contá = 0
dato2 = Sheets("Original").Cells(fila1, ncol).Value
If dato1 + dato2 = 0 Then
Sheets("Coinciden").Cells(filaev, 1) = Sheets("Original"). Cells(fila, 1)
Sheets("Coinciden").Cells(filaev, 2) = Sheets("Original"). Cells(fila, 2)
Sheets("Coinciden").Cells(filaev, 3) = Sheets("Original"). Cells(fila, 3)
Sheets("Coinciden").Cells(filaev, 4) = Sheets("Original"). Cells(fila, 4)
Sheets("Coinciden").Cells(filaev, 5) = Sheets("Original"). Cells(fila, 5)
Sheets("Coinciden").Cells(filaev, 6) = Sheets("Original"). Cells(fila, 6)
Sheets("Coinciden").Cells(filaev, 7) = Sheets("Original"). Cells(fila, 7)
filaev = filaev + 1
Sheets("Coinciden").Cells(filaev, 1) = Sheets("Original"). Cells(fila1, 1)
Sheets("Coinciden").Cells(filaev, 2) = Sheets("Original"). Cells(fila1, 2)
Sheets("Coinciden").Cells(filaev, 3) = Sheets("Original"). Cells(fila1, 3)
Sheets("Coinciden").Cells(filaev, 4) = Sheets("Original"). Cells(fila1, 4)
Sheets("Coinciden").Cells(filaev, 5) = Sheets("Original"). Cells(fila1, 5)
Sheets("Coinciden").Cells(filaev, 6) = Sheets("Original"). Cells(fila1, 6)
Sheets("Coinciden").Cells(filaev, 7) = Sheets("Original"). Cells(fila1, 7)
Sheets("Original").Cells(fila, ncol).EntireRow.Delete
Sheets("Original").Cells(fila1 - 1, ncol).EntireRow.Delete
contá = 1
filaev = filaev + 1
End If
fila1 = fila1 + 1
Wend
If contá = 0 Then
Sheets("No Coinciden").Cells(filade, 1) = Sheets("Original"). Cells(fila, 1)
Sheets("No Coinciden").Cells(filade, 2) = Sheets("Original"). Cells(fila, 2)
Sheets("No Coinciden").Cells(filade, 3) = Sheets("Original"). Cells(fila, 3)
Sheets("No Coinciden").Cells(filade, 4) = Sheets("Original"). Cells(fila, 4)
Sheets("No Coinciden").Cells(filade, 5) = Sheets("Original"). Cells(fila, 5)
Sheets("No Coinciden").Cells(filade, 6) = Sheets("Original"). Cells(fila, 6)
Sheets("No Coinciden").Cells(filade, 7) = Sheets("Original"). Cells(fila, 7)
Sheets("Original").Cells(fila, ncol).EntireRow.Delete
filade = filade + 1
End If
contá = 0
fila1 = 3
Wend
End Sub

Visita http://www.programarexcel.com

Excelente, la macro funciona muy bien.

Solo que en caso de que necesitara evaluar 5000 o mas lineas debería poner un contador o repetir la sentencia. Sheet para cada caso.?

Gracias de antemanos por cualquier sugerencia.

Estimado muchas gracias, fue de excelente ayuda la Macro.

Ahora quiero agregarle otra condición pero te avisare si necesito ayuda.

Gracias. 5 estrellas

Ok aca estoy. Finaliza la pregunta por favor si Necesitas ejemplos visita www.programarexcel.com

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas