Eliminación de filas según una fecha
fortbelin
Mensajes publicados
22
Estado
Miembro
-
fortbelin Mensajes publicados 22 Estado Miembro -
fortbelin Mensajes publicados 22 Estado Miembro -
Hola,
Hola a todos y a todas.
Necesito su ayuda para una macro.
Se trata de poder eliminar filas de una hoja de Excel, pero solo si una celda de esa fila contiene una fecha que es anterior a una fecha de referencia.
Por ejemplo, eliminar todas las filas que contienen fechas anteriores al 25/12/2002.
Muchas gracias por su ayuda.
Configuración: Windows XP / Safari 535.1
Hola a todos y a todas.
Necesito su ayuda para una macro.
Se trata de poder eliminar filas de una hoja de Excel, pero solo si una celda de esa fila contiene una fecha que es anterior a una fecha de referencia.
Por ejemplo, eliminar todas las filas que contienen fechas anteriores al 25/12/2002.
Muchas gracias por su ayuda.
Configuración: Windows XP / Safari 535.1
10 respuestas
-
En este caso:
Private Sub CommandButton1_Click() Dim currentd As Date Dim refdate As Date Dim i, imax refdate = Range("A1").Value imax = Range("A65536").End(xlUp).Row For i = IndiceLigneDeTaPlageDeDate To imax + 1 If (Range("A" & i).Value < refdate) And (Range("A" & i).Value <> "") Then Range("A" & i).EntireRow.Delete i = i - 1 End If Next i End Sub
donde tu fecha de referencia está en A1, y tu rango de datos está en la columna A, pero puedes adaptarlo. Si tus fechas están en la línea G, reemplaza Range("A65536") por Range("G65536"), y los "A" & i por "G" & i.
Ahí lo tienes.
--
Siempre hay que pensar en aceptar un post que te saque de un apuro.-
Hola,
tu macro no es correcta: cuando eliminamos filas, no empezamos de la primera a la última, sino de la última a la primera.
De hecho, supongamos que debemos eliminar la fila 4 y 5. Al partir de la primera fila, vamos a eliminar la 4ª. La 5ª se convierte en la 4ª, y la 6ª se convierte en la 5ª. Continuamos con el código y en el bucle, llegamos a la 5ª fila (que era la 6ª), esta fila no se debe eliminar. Entonces, hemos perdido la fila nº 5...
En el otro sentido, partimos de la última, eliminamos la 5ª, la 4ª sigue siendo la 4ª. Entramos en el bucle y eliminamos la 4ª.
Por lo tanto, es mejor hacerFor i = Imax+1 to IndiceLigneDeTaPalgeDeDate Step -1
Atentamente. -
-
-
-
-
-
Hola Fortbelin,
"Si una celda de la línea...", ¿te refieres a una celda, cualquiera, o a una celda bien precisa?
--
Siempre hay que pensar en aceptar un cargo que te saque del apuro. -
Hola,
se trata más bien de una celda muy precisa porque tengo una columna de fecha en mi hoja de excel.
Entonces, en realidad, si mi columna de fecha está en G, por ejemplo, la macro elimina todas las filas que tienen en la columna G una fecha anterior a una fecha de referencia.
Muchas gracias -
Muchas gracias, intentaré
¿Tendría lo mismo pero en función de una lista de nombres?
Ejemplo, eliminar las líneas que contengan pierre o paul o jean ....
Gracias
Christophe -
Soy yo otra vez
Lo siento, pero esto no funciona o soy yo quien no hace lo que debería
¿Hay que poner el código en un módulo?
Private Sub CommandButton1_Click()
Dim currentd As Date
Dim refdate As Date
Dim i, imax
refdate = Range("C1").Value
imax = Range("C65536").End(xlUp).Row
For i = IndiceLigneDeTaPlageDeDate To imax + 1
If (Range("C" & i).Value < refdate) And (Range("C" & i).Value <> "") Then
Range("C" & i).EntireRow.Delete
i = i - 1
End If
Next i
End Sub
gracias -
Muchas gracias,
eso funciona.
Lo siento, pero no soy un especialista.-
Ningún problema, pero hay muchos tutoriales en internet o libros bastante completos en librerías sobre VBA, así que no dudes en consultar la red para encontrar cómo realizar macros en VBA.
Personalmente, te aconsejaría que vayas al sitio de las ediciones First (editor de la serie "para dummies").
Atentamente.
-
-
¿Tendrías alguna idea para hacer lo mismo con una lista de nombres?
Gracias -
Muchas gracias, intentaré ponerme al tanto del tema, pero por el momento realmente no tengo tiempo.
Me lo piden en mi trabajo... -
De la misma manera.
Suponiendo que los nombres a eliminar estén en la columna A a partir de la fila 2 en tu primera hoja y tu lista de nombres general en la columna A fila 2 de tu segunda hoja:
Private Sub CommandButton1_Click() Dim i1, i2 Dim imaxOne Dim imaxTwo imaxOne = Worksheets(1).Range("A65536").End(xlUp).Row imaxTwo = Worksheets(2).Range("A65536").End(xlUp).Row For i1 = 2 To imaxOne For i2 = 2 To imaxTwo If Worksheets(1).Range("A" & i1).Value = Worksheets(2).Range("A" & i2).Value Then Worksheets(2).Range("A" & i2).EntireRow.Delete i2 = i2 - 1 imaxTwo = imaxTwo - 1 End If Next i2 Next i1 End Sub
--
Siempre hay que pensar en aceptar una publicación que te saque del apuro. -