Macro para eliminar facturas de varias líneas con importe total 0 y marcar las negativas.

Para un listado de facturas, con varias lineas por cada factura, necesitaría saber como eliminar las facturas que tienen un total igual a cero y marcar las que son negativas.

Para las negativas se podría marcar en una columna nueva, como pongo en el ejemplo : "negativa si o no"

Adjunto un excel con un ejemplo.

1 Respuesta

Respuesta
1

Te confirmo la recepción del archivo, lo reviso y te pongo la respuesta.

1. ¿Cuál es la columna del importe? es la "EXTENDED_AMOUNT"?

Qué debo hacer:

2. Debo sumar todos los importes de una sola factura y si el saldo es 0, ¿eliminar la factura?

3. Si el saldo de esa factura es negativo, escribir la palabra "Si" en la columna "negativo", ¿le pongo la palabra "Si" a todos los registros que pertenecen a esa factura?

o

4. Debe considerar el importe que viene en cada fila, si es igual a 0 elimino esa fila, si es negativo escribo "Si" en la columna "Negativo?

1. El importe está en la columna extended_amount.

2. Exacto sumar todos los importes de una factura y si es 0 eliminar toda la factura, es decir todas las líneas de esa factura.

3. Exacto, a todos los registros. Se puede poner negativo si es negativo o positivo si es positivo, la idea de esto es que después en la plantilla el valor de la celda A1 cambie según sea positiva (CF) o negativa (CFR).

4. Sería lo indicado en el 4.

Saludos,

Te anexo la macro para eliminar facturas y poner si o no en la columna "negativo"

Sub EliminaFacturas()
'Por.Dante Amor
    Application.ScreenUpdating = False
    c = "F"
    ant = Cells(2, c)
    tot = 0
    ini = 2
    For i = 2 To Range(c & Rows.Count).End(xlUp).Row + 1
        If ant <> Cells(i, c) Then
            Select Case tot
                Case 0
                    Range("AE" & ini & ":AE" & fin) = "eliminar"
                Case Is < 0
                    Range("AE" & ini & ":AE" & fin) = "SI"
                Case Is > 0
                    Range("AE" & ini & ":AE" & fin) = "NO"
            End Select
            ini = i
            tot = 0
        End If
        tot = tot + Cells(i, "M")
        ant = Cells(i, c)
        fin = i
    Next
    '
    For i = Range(c & Rows.Count).End(xlUp).Row To 2 Step -1
        If Cells(i, "AE") = "eliminar" Then Rows(i).Delete
    Next
    MsgBox "Terminado"
End Sub

Saludos.Dante Amor

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas