Jump to content

Vba macro para sumar de abajo hacia arriba hasta la primera celda en blanco que encuentre (con condición).


Recommended Posts

Hola, necesito sumar de abajo hacia arriba una columna hasta la primera celda en blanco que encuentre, siempre y cuando sea una compra. El problema, es que tengo una tabla ordenada por Id con un conjunto de operaciones para cada cálculo individual. Lo he intentado solucionar de 2 maneras con fórmulas de Excel.

La 1ª: Haciendo suma y agrupa (está en la Hoja1 del ejemplo). No me sirve porque para que funcione tengo que indicar un rango específico y el rango según el día que lance la macro puede cambiar.

En La 2ª: Haciendo un SUMAR.SI (hoja2 del ejemplo).

No me sirve por dos motivos, el primero es que solo se usarlo para un tipo de Id porque tengo que seleccionar toda la columna (como veis, no he añadido el resto de operaciones). Y, el segundo es porque no sé cómo añadir a esa fórmula que lo haga solo para las compras.

Intento llevarme esto a VBA.

En la hoja1 (columnas F y G) está cómo debería ser el resultado (no me sirve esa fórmula por lo que comenté del rango). Si no se puede hacer, pienso en otra cosa, pero me gustaría saber vuestra opinión. ¡Un millón de gracias!

ejemplo suma hacia arriba.xlsx

Link to comment
Share on other sites

17 hours ago, Maria_80 said:

Hola, necesito sumar de abajo hacia arriba una columna hasta la primera celda en blanco que encuentre, siempre y cuando sea una compra. El problema, es que tengo una tabla ordenada por Id con un conjunto de operaciones para cada cálculo individual. Lo he intentado solucionar de 2 maneras con fórmulas de Excel.

La 1ª: Haciendo suma y agrupa (está en la Hoja1 del ejemplo). No me sirve porque para que funcione tengo que indicar un rango específico y el rango según el día que lance la macro puede cambiar.

En La 2ª: Haciendo un SUMAR.SI (hoja2 del ejemplo).

No me sirve por dos motivos, el primero es que solo se usarlo para un tipo de Id porque tengo que seleccionar toda la columna (como veis, no he añadido el resto de operaciones). Y, el segundo es porque no sé cómo añadir a esa fórmula que lo haga solo para las compras.

Intento llevarme esto a VBA.

En la hoja1 (columnas F y G) está cómo debería ser el resultado (no me sirve esa fórmula por lo que comenté del rango). Si no se puede hacer, pienso en otra cosa, pero me gustaría saber vuestra opinión. ¡Un millón de gracias!

ejemplo suma hacia arriba.xlsx 12.5 kB · 5 downloads

Hola, os dejo aquí una solución para lo que sería la Hoja1 por si le sirve a alguien, pero sí que me gustaría saber cómo resolver la hoja 2 para todos los Id con la fórmula sumar.si y conseguir el mismo resultado (ahora mismo solo hay uno porque necesito seleccionar toda la columna). Gracias.

 

 

Sol_hoja1.xlsm

Link to comment
Share on other sites

@Maria_80,usa el siguiente código:
 

Sub suma_condicional()
Dim uF&
Dim ID As New Collection
Dim item
Dim i&, j&, suma&

uF = Range("A" & Rows.Count).End(xlUp).Row

For i = 2 To uF
    On Error Resume Next
    ID.Add Cells(i, 1), CStr(Cells(i, 1))
Next i

On Error GoTo 0

h = 2
For Each item In ID
    suma = 0
    For j = 2 To uF
        If Cells(j, 1) = item And Cells(j, 2) = "compra" And Cells(j, 3) <> "" Then
            suma = suma + Cells(j, 3)
        End If
    Next j
    Cells(h, 6) = item
    Cells(h, 7) = suma
    h = h + 1
Next item

End Sub

 

Link to comment
Share on other sites

2 hours ago, Haplox said:

@Maria_80,usa el siguiente código:
 

Sub suma_condicional()
Dim uF&
Dim ID As New Collection
Dim item
Dim i&, j&, suma&

uF = Range("A" & Rows.Count).End(xlUp).Row

For i = 2 To uF
    On Error Resume Next
    ID.Add Cells(i, 1), CStr(Cells(i, 1))
Next i

On Error GoTo 0

h = 2
For Each item In ID
    suma = 0
    For j = 2 To uF
        If Cells(j, 1) = item And Cells(j, 2) = "compra" And Cells(j, 3) <> "" Then
            suma = suma + Cells(j, 3)
        End If
    Next j
    Cells(h, 6) = item
    Cells(h, 7) = suma
    h = h + 1
Next item

End Sub

 

Mil gracias @Haplox va de lujo, como siempre. He podido adaptarlo sin problema! ;).

Link to comment
Share on other sites

Pues yo he hecho esto y el resultado no es el mismo que el de la macro de Haplox, pero se ajusta a lo que has solicitado.

He trabajado con el primer archivo que subiste.

Sub SumarHaciaArriba()
Range("H:I").Clear
[H1] = "Tipo"
[I1] = "Resultado"
fila = 1
For x = 2 To Range("A" & Rows.Count).End(xlUp).Row + 1
   If Range("C" & x) = "" Then
      Total = 0
   Else
      If LCase(Range("B" & x)) = "compra" Then
         Total = Total + Range("C" & x)
      End If
      If Not Range("A" & x) = Range("A" & x + 1) Then
         fila = fila + 1
         Range("H" & fila) = Range("A" & x)
         Range("I" & fila) = Total
      End If
   End If
Next
End Sub

 

Link to comment
Share on other sites

On 7/17/2021 at 6:38 PM, Antoni said:

Pues yo he hecho esto y el resultado no es el mismo que el de la macro de Haplox, pero se ajusta a lo que has solicitado.

He trabajado con el primer archivo que subiste.

Sub SumarHaciaArriba()
Range("H:I").Clear
[H1] = "Tipo"
[I1] = "Resultado"
fila = 1
For x = 2 To Range("A" & Rows.Count).End(xlUp).Row + 1
   If Range("C" & x) = "" Then
      Total = 0
   Else
      If LCase(Range("B" & x)) = "compra" Then
         Total = Total + Range("C" & x)
      End If
      If Not Range("A" & x) = Range("A" & x + 1) Then
         fila = fila + 1
         Range("H" & fila) = Range("A" & x)
         Range("I" & fila) = Total
      End If
   End If
Next
End Sub

 

Hola, Antoni! Funciona de lujo para la Hoja1, y como siempre se entiende genial. Muchísimas gracias!!

Link to comment
Share on other sites

  • Crear macros Excel

  • Posts

    • Muchas gracias! Voy a tener que revisar las macros porque no domino mucho...   Saludos!
    • Sube tu archivo siempre y pon un ejemplo de donde hay que tomar los datos y donde y como deben reflejarse  
    • Hola nuevamente muchachos. Espero estén bien todos, es mi mayor deseo. Estoy teniendo otro problema por acá con la configuración de un TextBox donde quiero expresar números. Propiamente el número que va a estar reflejado en esos TextBox son la división del Salario Mensual entre los días a trabajar y eso me da un índice o tarifa salarial diaria.  No tengo problemas en las operaciones matemáticas, sino en el formato a expresar en el TextBox.  Este dato lo toma el TextBox de la Hoja, la que tengo configurada (Celda) como Numero. Podrían ayudarme. Gracias de antemano y excelente semana para todos. Saludos Pino
    • Buenas tardes. Tengo el siguiente código en una macro:   Sub Prueba() hora = Hour(Now) If hora <= 18 & Sheets("Hoja1").Range("G7") = 1 Then     MsgBox ("haz esto")      ElseIf hora > 18 & Sheets("Hoja1").Range("G7") = 2 Then     MsgBox ("haz esto otro")      Else     MsgBox ("No se cumple") End If End Sub Sin embargo,  siempre se me ejecuta el Else aunque a priori se cumplan las condiciones del If. Adjunto el excel de prueba. ¿Alguna idea del por qué no entra en el If ni en el ElseIf? Gracias   Prueba.xlsm
  • Recently Browsing

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

Privacy Policy