Excel vba sumar desde la última línea hacia arriba hasta la primera celda en blanco

Necesito llegar a al resultado que indico en la foto después de la flecha. Me pierdo porque hay varios Ids distintos y no sé cómo separar eso. Tiene que sumar desde la última línea de cada Id hacia arriba hasta la primera celda en blanco siempre y cuando sea una compra.

¿Alguna sugerencia? Gracias de antemano

Respuesta

Este ejemplo, si bien elimina tu puedes hacer lo que requieres en vez de eliminar, pero el ejemplo recorre celdas de abajo hacia arriba

https://macrosenexcel.com/como-eliminar-filas-vacias-o-recorrer 

1 respuesta más de otro experto

Respuesta
3

Excel tiene una funcionalidad de hacer las cosas de arriba hacia abajo o de izquierda a derecha. De alguna manera no es posible indicarle, con fórmulas, que sume de "desde la última línea de cada Id hacia arriba".

Entonces la lógica sería sumar, igual de la primera celda hasta la última celda, pero solamente si cumple las condiciones de ID, "compra" y la fila sea mayor a la fila que contiene celda en blanco.

Utiliza la siguiente fórmula:

=SUMAPRODUCTO(($A$2:$A$21=F8)*($B$2:$B$21="compra")*(FILA($C$2:$C$21)>MAX(($A$2:$A$21=F8)*($C$2:$C$21="")*FILA($C$2:$C$21)))*$C$2:$C$21)

Ejemplo:

¡Gracias, dante! Entiendo la respuesta! mi pregunta es, entonces no se puede hacer con cualquier tabla y llevarme esa fórmula a VBA? es por lo del rango... unas veces será 21 otras lo mismo 123... he visto que lo acotas en la Fx...

Se puede llevar a VBA. En VBA sí puedes sumar de abajo hacia arriba.

En VBA lo puedes hacer de varias formas. Te muestro cómo sería con la fórmula.

Los resultados empezarán en la celda F2

Sub SumarValores()
  Dim a As Variant
  Dim i As Long, lr As Long
  Dim dic As Object
  '
  'almacenar los datos en una matriz
  lr = Range("A" & Rows.Count).End(3).Row
  a = Range("A2:C" & lr).Value
  'crear el índice de ID
  Set dic = CreateObject("Scripting.Dictionary")
  For i = 1 To UBound(a)
    dic(a(i, 1)) = Empty
  Next
  '
  'Poner los ID únicos en F2
  Range("F2").Resize(dic.Count).Value = Application.Transpose(dic.keys)
  'Poner la fórmula en G2
  With Range("G2:G" & Range("F" & Rows.Count).End(3).Row)
    .Formula = "=SUMPRODUCT(($A$2:$A$" & lr & "=F2)*($B$2:$B$" & lr & "=""compra"")*" & _
               "(ROW($C$2:$C$" & lr & ")>MAX(($A$2:$A$" & lr & "=F2)*($C$2:$C$" & lr & "="""")*" & _
               "ROW($C$2:$C$" & lr & ")))*$C$2:$C$" & lr & ")"
  End With
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas