Forum Discussion

a7024782's avatar
a7024782
Brass Contributor
Feb 18, 2024

Promedio dentro de rango dinamico

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

  • NikolinoDE's avatar
    NikolinoDE
    Gold Contributor

    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.

    • a7024782's avatar
      a7024782
      Brass Contributor
      Gracias por su aporte, probare a partir de este codigo

Resources