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

    • Buenas tardes, expertos solicito una ayuda para concatenar dos columnas una de ellas es en cuanto a la fechas, lo que pasa es que la macro que tengo concatena muy bien, solo tengo un inconveniente con las fechas dicha columna (I) estas formateadas por ejemplo asi: Feb-20 pero al concatenar el resultado asi: O-2AA6220/09/2021, pero asi no quiero, me gustaria concatenar que salga asi: A-234RV44032 los 5 ultimos digitos son de la fecha, bueno asi me gustaria que quede, la macro que estoy usando es: Sub Concatenar() uFila = Range("H" & Cells.Rows.Count).End(xlUp).Row pFila = 1 For fila = pFila + 1 To uFila     Range("O" & fila) = Range("H" & fila) & Range("I" & fila) Next fila End Sub Por favor si me podria dar una ayuda estare muy agradecido. Adjunto el archivo Consolidado.xlsm
    • Con la grabadora Pero son demasiadas filas. Sub Macro1() Range("C3:I7").Select Selection.Copy Range("C12").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.Copy Range("C21").Select ActiveSheet.Paste Application.CutCopyMode = False End Sub Hace tiempo que no entro en el foro y no veo la opcion de subir libro. Un Saludo.
    • Desconozco si por falta de aportación de datos, no me pueden ayudar  o es que no se puede desarrollar esta macro. Gracias.
    • Antoni muchas gracias, eso lo que esperaba. Consegui también estas lineas codigo. Sub Rellenar() Dim uf, fila As Integer uf = Sheets("Consolidar").Range("A" & Rows.Count).End(xlUp).Row fila = 2 While fila <= uf If Sheets("Consolidar").Cells(fila, 2) = Empty Then    Sheets("Consolidar").Cells(fila, 2) = "DIGITAL" End If fila = fila + 1 Wend End Sub
    • Range("B2:B" & ActiveSheet.UsedRange.Rows.Count) = "DIGITAL"  
  • Recently Browsing

    No registered users viewing this page.

×
×
  • Create New...

Important Information

Privacy Policy