Promedio dentro de rango dinamico

Brass Contributor

Necesito ayuda con el desarrollo de un codigo vba que haga esto:
Definir un rango c2:c1001
Definir un subrango dinámico de 96 filas que inicie en la celda c2 y termine en la celda c96.
Dentro de este subrango; identificar los 32 valores más altos.
Calcular el promedio de estos 32 valores.
Escribir este resultado en la celda M96
Reiniciar el proceso desde el rango c3:c101 y repetirlo hasta llegar a c1001; los resultados los escribe a partir de m97 hasta m1001. Gracias de antemano por cualquier comentario

2 Replies

@a7024782 

Puedes lograr esto utilizando un bucle en VBA para recorrer los diferentes rangos y realizar los cálculos necesarios. Aquí tienes un ejemplo de cómo hacerlo:

El código Vba no está probado, haga una copia de seguridad de su archivo.

Sub CalcularPromedio()

    Dim ws As Worksheet
    Dim i As Long
    Dim j As Long
    Dim rng As Range
    Dim subrng As Range
    Dim cell As Range
    Dim maxValues As Variant
    Dim sumValues As Double
    Dim promedio As Double
    
    ' Establecer la hoja de trabajo
    Set ws = ThisWorkbook.Sheets("Nombre de tu hoja de trabajo")
    
    ' Definir el rango principal
    Set rng = ws.Range("C2:C1001")
    
    ' Bucle para recorrer los diferentes rangos
    For i = 2 To 1001 Step 96
        
        ' Definir el subrango dinámico
        Set subrng = ws.Range(ws.Cells(i, 3), ws.Cells(i + 95, 3))
        
        ' Inicializar el array para almacenar los valores máximos
        ReDim maxValues(1 To 32)
        
        ' Identificar los 32 valores más altos dentro del subrango
        For j = 1 To 32
            maxValues(j) = WorksheetFunction.Large(subrng, j)
        Next j
        
        ' Calcular el promedio de los 32 valores más altos
        sumValues = WorksheetFunction.Sum(maxValues)
        promedio = sumValues / 32
        
        ' Escribir el resultado en la celda correspondiente en columna M
        ws.Cells(i + 94, 13).Value = promedio
        
    Next i
    
End Sub

Asegúrate de reemplazar "Nombre de tu hoja de trabajo" con el nombre de la hoja de trabajo en la que estás trabajando. Este código recorre el rango C2:C1001 en incrementos de 96 filas, identifica los 32 valores más altos en cada subrango dinámico de 96 filas, calcula su promedio y escribe el resultado en la columna M (columna 13) comenzando desde la fila 97. El texto, los pasos y el código vba se crearon con la ayuda de IA.

Este texto está incluido en el software, es posible utilizar gramáticamente o en un formato externo.

 

¡Mis respuestas son voluntarias y sin garantía!

 

Espero que esto te ayudará.

¿Fue útil la respuesta? Marca como mejor respuesta y dale me gusta!

Esto ayudará a todos los participantes del foro.

Gracias por su aporte, probare a partir de este codigo