Jump to content

Ayuda para obtener promedios en fila de Totales


Go to solution Solved by JSDJSD,

Recommended Posts

Buena noche foristas.

Es un gusto saludarles y solicitarles su apoyo en lo siguiente.

Hace un tiempo obtuve el apoyo de @JSDJSD para una macro que agrega una fila de totales y subtotales en la hoja CUADRO. En esta hoja se importa información de la hojas DATOS. En la actualidad me funciona bien,  en la hoja CUADRO cuenta con 2 columnas denominadas DAP y VOLUMEN. Al final se suman los totales, pero mi deseo es que en la fila Total aparezca la Suma de VOLUMEN (que lo hace muy bien), pero en la columna DAP, obtenga el PROMEDIO de las filas SUBTOTALES, que es lo que aún no logro modificar.

Si pudieran apoyarme, se los agradecería.

La macro es esta:

Sub EXTRAER()
    With Hoja2
        For x = .Range("D" & Rows.Count).End(xlUp).Row To 5 Step -1
            If .Cells(x, 4) = "SUBTOTAL" Or .Cells(x, 4) = "TOTAL" Then
                .Range("D" & x).EntireRow.Delete
            End If
        Next x
        
        
        Hoja1.Range("A1", "E" & Hoja1.Range("E" & Rows.Count).End(xlUp).Row).AdvancedFilter _
        Action:=xlFilterCopy, CopyToRange:=.Range("C4:D4"), Unique:=True
        .Sort.SortFields.Clear
        
        .Range("c4", "d" & .Range("D" & Rows.Count).End(xlUp).Row).Sort Key1:=.Range("C4"), _
        Key2:=.Range("D4"), Header:=xlYes, Order1:=xlAscending, Order2:=xlAscending
        
        .Range("C5:C" & .Range("C" & Rows.Count).End(xlUp).Row).AdvancedFilter 2, , .Range("O5"), 1
        .Range("O:O").Sort Key1:=.Columns("O"), Order1:=xlAscending, Header:=xlYes
        linea = 5
        
        For cont = 3 To .Range("O" & Rows.Count).End(xlUp).Row
            buscado1 = .Cells(cont, 15)
            For Each buscado In .Range("C" & linea, "C" & .Range("C" & Rows.Count).End(xlUp).Row + 1)
                If buscado = buscado1 Then
                
            Else
                .Rows(buscado.Row).Insert
                .Cells(buscado.Row - 1, 4) = "SUBTOTAL"
                .Range("D" & buscado.Row - 1).Font.Bold = True
                .Range("E" & buscado.Row - 1).Font.Bold = True
                .Range("F" & buscado.Row - 1).Font.Bold = True
                .Cells(buscado.Row - 1, 6) = Application.WorksheetFunction.Sum(.Range("F" & linea, "F" & buscado.Row - 1))
                .Cells(buscado.Row - 1, 5) = Round(Application.WorksheetFunction.Average(.Range("E" & linea, "E" & buscado.Row - 1)), 2)
                acumulado = acumulado + CDbl(.Cells(buscado.Row - 1, 6))
                acumulado1 = acumulado1 + CDbl(.Cells(buscado.Row - 1, 5))
                linea = buscado.Row
                Exit For
                End If
            Next
        Next cont
        .Range("D" & linea) = "TOTAL"
        .Range("D" & linea).Font.Bold = True
        .Range("E" & linea) = acumulado1
        .Range("E" & linea).Font.Bold = True
        .Range("F" & linea) = acumulado
        .Range("F" & linea).Font.Bold = True
        .Range("O:O").Columns.Delete
    End With
End Sub

Adjunto el archivo de ejemplo.

EJEMPLO FILTRO.xlsm

Link to comment
Share on other sites

  • Solution

 

Sub EXTRAER()
    With Hoja2
        For x = .Range("D" & Rows.Count).End(xlUp).Row To 5 Step -1
            If .Cells(x, 4) = "SUBTOTAL" Or .Cells(x, 4) = "TOTAL" Then
                .Range("D" & x).EntireRow.Delete
            End If
        Next x
        
        
        Hoja1.Range("A1", "E" & Hoja1.Range("E" & Rows.Count).End(xlUp).Row).AdvancedFilter _
        Action:=xlFilterCopy, CopyToRange:=.Range("C4:D4"), Unique:=True
        .Sort.SortFields.Clear
        
        .Range("c4", "d" & .Range("D" & Rows.Count).End(xlUp).Row).Sort Key1:=.Range("C4"), _
        Key2:=.Range("D4"), Header:=xlYes, Order1:=xlAscending, Order2:=xlAscending
        
        .Range("C5:C" & .Range("C" & Rows.Count).End(xlUp).Row).AdvancedFilter 2, , .Range("O5"), 1
        .Range("O:O").Sort Key1:=.Columns("O"), Order1:=xlAscending, Header:=xlYes
        linea = 5
        
        For cont = 3 To .Range("O" & Rows.Count).End(xlUp).Row
            buscado1 = .Cells(cont, 15)
            For Each buscado In .Range("C" & linea, "C" & .Range("C" & Rows.Count).End(xlUp).Row + 1)
                If buscado = buscado1 Then
                
            Else
                .Rows(buscado.Row).Insert
                .Cells(buscado.Row - 1, 4) = "SUBTOTAL"
                .Range("D" & buscado.Row - 1).Font.Bold = True
                .Range("E" & buscado.Row - 1).Font.Bold = True
                .Range("F" & buscado.Row - 1).Font.Bold = True
                .Cells(buscado.Row - 1, 6) = Application.WorksheetFunction.Sum(.Range("F" & linea, "F" & buscado.Row - 1))
                .Cells(buscado.Row - 1, 5) = Round(Application.WorksheetFunction.Average(.Range("E" & linea, "E" & buscado.Row - 1)), 2)
                acumulado = acumulado + CDbl(.Cells(buscado.Row - 1, 6))
                acumulado1 = acumulado1 + CDbl(.Cells(buscado.Row - 1, 5))
                linea = buscado.Row
                Exit For
                End If
            Next
        Next cont
        .Range("D" & linea) = "TOTAL"
        .Range("D" & linea).Font.Bold = True
        .Range("E" & linea) = acumulado1 / (cont - 3)   '<<<<<<<<<< Modifica esta línea en tu macro
        .Range("E" & linea).Font.Bold = True
        .Range("F" & linea) = acumulado
        .Range("F" & linea).Font.Bold = True
        .Range("O:O").Columns.Delete
    End With
End Sub

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • 72 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Files

  • Download Statistics

    • Files
      169
    • Comments
      89
    • Reviews
      26

    Latest File
    By pegones1

    4    0

  • Crear macros Excel

  • Posts

    • Entonces sería esto lo que necesitas verdad ?
    • buen día estimados los molesto con la siguiente consulta yo tengo un archivo Excel de valores numéricos (costo) , pero debo de pasarlo a un formato texto con tres decimales por mas que sea un entero. cual seria la mejor forma para tener la columna CONCATENADO, en la que debe figurar el entero con tres decimales desde ya muchas gracias por la ayuda de siempre enteros y decimales en celdas distintas.xlsx
    • Muchas gracias por la respuesta Israel. Me sirve el dato. No es necesario algo tan complejo. Si por ahí tienes una idea de utilización que me puedas orientar con la función GoogleFinance te lo agradezco. 
    • Hola a todos, Necesito una formula que busque los días que hubo la temperatura más alta y los anote separados por un guion. En el ejemplo que subo serían los días 10, 14 y 26. Gracias de antemano Máximas mensuales.xlsx
    • Lo que te puedo comentar sobre tu consulta es en base a mi experiencia y que tanto en Excel como en Google Sheets es posible obtener el tipo de cambio. En Excel 365 usando la función MONEDA y en Google Sheets tienes una función llamada GOOGLEFINANCE(), Es importante resaltar que el tipo de cambio no es de un sitio específico como lo quieres. Para obtener la cotización del dólar desde un sitio específico como BNA, necesitarías usar técnicas de web scraping. Un método utilizado para extraer información de sitios web. Sin embargo, este proceso no siempre es posible debido a las restricciones del sitio web. Si eres cliente del Banco podrías consultar con la institución.
  • Recently Browsing

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

Important Information

Privacy Policy