Eliminar filas de un rango especifico

Buenas tardes, primero quiero felicitarles por sus explicaciones, me ha servido mucho para hacer este trabajo. Bueno es lo siguiente con respecto a la imágen. Necesito eliminar los datos de la fila 19 y 20, desde la columna P hasta la AA, y luego subir la fila 21 y 22 desde la columna P hasta la AA, para empalmar con la fila 18. Bueno hasta ahí fácil, manualmente es posible hacerlo y mediante una macro, pero el problema es que no siempre es así, puede ser que en Descripción puede haber uno, dos, tres, cuatro productos, o solo un producto, la columna que me dice la cantidad de productos que solicitan es la columna Cant_Pedido, entonces no sabemos cuantas filas debemos eliminar, el rango en columnas siempre va ser los mismo desde P hasta AA.

Los dos últimos productos siempre estarán en esas filas.

En este ejemplo me solicitan 5 productos de talla XS, 4 de S, 3 de M, 5 de L y 6 de XL. Las tallas XXL Y XXXL, son productos que siempre va a aparecer. Necesito eliminar las tallas que no me solicitan.

Otro ejemplo si solo fuera solo la talla XS que me solicitan, tendría que eliminar de la fila 15 a la 20, entre las columnas P hasta la AA. Para luego subir las filas 21 y 22 y ubicarlas debajo de la fila 14.

2 Respuestas

Respuesta
1

Supongo que lo que buscas algo así

 esta es la macro

Sub BORRAR_DATOS()
Set Funcion = WorksheetFunction
With Range("P10")
    FILAS = .CurrentRegion.Rows.Count
    COLUMNAS = .CurrentRegion.Columns.Count
End With
Set DATOS = Range("P14").Resize(FILAS - 4, COLUMNAS)
With DATOS
    FILAS = .Rows.Count:    PRODUCTO = Range("P11")
    Set ULTIMA = .Columns(COLUMNAS + 1).Resize(FILAS, 1)
    LARGO = Len(PRODUCTO)
    For I = 1 To FILAS
        IZQUIERDA = Left(.Cells(I, 1), LARGO)
        ULTIMA.Cells(I, 1) = IZQUIERDA
    Next I
    Set DATOS = .Resize(FILAS, COLUMNAS + 1)
    COLUMNAS = .Columns.Count
    CUENTA = Funcion.CountIf(.Columns(COLUMNAS), PRODUCTO)
    CUENTA2 = Funcion.CountIfs(.Columns(COLUMNAS), PRODUCTO, .Columns(5), 0)
    .Rows(CUENTA - CUENTA2 + 1).Resize(CUENTA2, COLUMNAS).EntireRow.Delete
    .Columns(COLUMNAS).Clear
End With
End Sub

Olvide mencionar funciona así, la macro leerá el nombre del producto en la celda p11 y después creara creara una columna temporal con el nombre del producto sin las tallas, luego buscara cuantos productos tienes y cuantos de esos productos tienen pedidos igual a 0, restara ambas cantidades y la diferencia es la cantidad de filas que va a borrar, recorriendo los últimos lugares a las posiciones que se van a borrar, por ultimo borra la columna temporal y el resultado es el que ves en las dos imágenes.

¡Gracias! Voy a probar y le cuento, pero por lo que veo, es así, me cogiste la idea, luego te cuento, probaré.


Amigo James, me bota error en esta línea:

.Rows(CUENTA - CUENTA2 + 1).Resize(CUENTA2, COLUMNAS).EntireRow.Delete

Utilizo Excel 2016.

De seguro me botará también en esta linea:

.Columns(COLUMNAS).Clear

veo que que usa Office 2007, como seria para office 2016?

Veamos la version no tiene que ver nada con este error, el error es el siguiente CUENTA2=0, esta variable cuenta los pedidos que estan en 0, al no haber tener ningun registro en 0 salte este error, te paso la macro que anula ese error

aqui esta la macro corregida

Sub BORRAR_DATOS()
Set funcion = WorksheetFunction
With Range("P10")
    filas = .CurrentRegion.Rows.Count
    columnas = .CurrentRegion.Columns.Count
End With
Set DATOS = Range("P14").Resize(filas - 4, columnas)
With DATOS
    filas = .Rows.Count:    PRODUCTO = Range("P11")
    Set ULTIMA = .Columns(columnas + 1).Resize(filas, 1)
    LARGO = Len(PRODUCTO)
    For i = 1 To filas
        IZQUIERDA = Left(.Cells(i, 1), LARGO)
        ULTIMA.Cells(i, 1) = IZQUIERDA
    Next i
    Set DATOS = .Resize(filas, columnas + 1)
    columnas = .Columns.Count
    cuenta = funcion.CountIf(.Columns(columnas), PRODUCTO)
    CUENTA2 = funcion.CountIfs(.Columns(columnas), PRODUCTO, .Columns(5), 0)
    On Error Resume Next
    .Rows(cuenta - CUENTA2 + 1).Resize(CUENTA2, columnas).EntireRow.Delete
    If Err.Number > 0 Then MsgBox ("NO HAY PEDIDOS EN 0"), vbCritical, "AVISO": End
    On Error GoTo 0
    .Columns(columnas).Clear
End With
End Sub
Respuesta
1

Te anexo la macro

Sub Eliminar_Filas()
'Por.Dante Amor
    For i = Range("P" & Rows.Count).End(xlUp).Row - 2 To 14 Step -1
        If Cells(i, "T") = "" Or Cells(i, "T") = 0 Then
            Range("P" & i & ":AA" & i).Delete Shift:=xlUp
        End If
    Next
    MsgBox "Fin"
End Sub

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas