Sacar promedio en rangos variables

Necesito preguntar lo siguiente:
Tengo una tabla de n filas y n columnas, con datos a los cuales quiero sacarles el promedio. El problema es que no siempre tengo la misma cantidad de filas.
Ejemplo
Item dato1 dato2 dato3... Daton
1 10 0 5 4
1 0 8 7 5
1 6 7 9 0
2 7 4 5 0
2 10 8 0 4
3 7 6 10 0
Necesito sacar el promedio del item1, item2, citem3... Itemn. ( El numero de columnas para cada item, siempre serán las mismas.

1 respuesta

Respuesta
1
El código sería el siguiente:
Sub Suma()
ValSuma = 0
ValPromedio = 0
' si tus valores numericos empiezan en otra fila (ej fila 4) tendras que cambiar el 2 por el 4.
Fila = 2
'Posiblemente tengas que cambiar la celda, si tus valores numericos empieza en otra celda (ej "B4")
Range("B2").Select
Do While ActiveCell.Value <> ""
Cells(Fila, 2).Select
    Do While ActiveCell.Value <> ""
    ValSuma = ValSuma + ActiveCell.Value
    ValPromedio = ValPromedio + 1
    If ActiveCell.Offset(0, 1).Value = "" Then
        ActiveCell.Offset(0, 1).Value = ValSuma / ValPromedio
        ValSuma = 0
        ValPromedio = 0
        Fila = Fila + 1
        Exit Do
    End If
    ActiveCell.Offset(0, 1).Select
    Loop
Loop
End Sub
-------------
Paso a explicarlo:
<div>(Comentarios arriba de linea de codigo)</div>
Sub Suma()
' se le asigna un valor inicial a las variables
ValSuma = 0
ValPromedio = 0
Fila = 2
'aqui indicamos en que celda nos colocaremos en un inicio, siendo en este caso la celda B2, donde tenemos nuestro primer numero, del rango de numeros
Range("B2").Select
'se indica que mientras esta recorriendo las celdas, si la celda en la que se encuentre tenga contenido, realice el codigo, y en el momento de que encuentre una celda vacia, termine. Este Do While se aplica para el recorrido de filas (1, 2, 3, etc)
Do While ActiveCell.Value <> ""
' Fila en un inicio vale 2, asi que nos colocaremos inicialmente en la celda 2, 2, es decir B2
Cells(Fila, 2).Select
'se indica que mientras esta recorriendo las celdas, si la celda en la que se encuentre tenga contenido, realice el codigo, y en el momento de que encuentre una celda vacia, termine. Este Do While se aplica para el recorrido de columnas (B, C, D, etc)
    Do While ActiveCell.Value <> ""
'recorriendo las columnas ira encontrando valores numericos, asi que ValSuma ira conservando la suma de cada celda que ha recorrido
    ValSuma = ValSuma + ActiveCell.Value
'al ir recorriendo las columnas, el valor de ValPromedio aumentara su valor actual + 1, correspondiendo a las columnas recorridas.
    ValPromedio = ValPromedio + 1
' esto indica que si en el recorrido, encuentra una celda con contenido, pero la celda a su derecha esta vacia...
    If ActiveCell.Offset(0, 1).Value = "" Then
'tal celda vacia contendra: la division de, el valor de la suma total, entre el numero de columnas recorridas, produciendo el promedio de la suma total.
        ActiveCell.Offset(0, 1).Value = ValSuma / ValPromedio
'se da un valor de 0 a las variables, pues de lo contrario, al seguir con el recorrido en las demas filas, las variables conservarian la suma de la fila anterior, lo que causaria que sumara tal valor + los valores de las demas filas
        ValSuma = 0
        ValPromedio = 0
'fila en un inicio era 2 (recordando 2, 2, es decir B2)
'con esto se define que fila sea igual a fila + 1, o 2=2+1, siendo 3
' esto es para colocarnos ahora en la celda 3,2, es decir B3
        Fila = Fila + 1
'como ya se ha encontrado una celda, cuya celda a su derecha esta vacia, termine el bucle Do del recorrido de columnas, y regresando al Do de las columnas y volviendo a empezar, en la fila siguiente, y con valores de 0 en las variables
        Exit Do
    End If
'debemos escribir esta instruccion para indicar que nos coloquemos en la celda de la derecha, de la celda actual donde nos encontramos. Asi vamos recorriendo celda por celda, dentro del Do. Si no se escribe, siempre nos encontrariamos en la misma celda, sin movernos, y se produciria un bucle infinito, sin salir del Do, y la aplicacion se colgaria
    ActiveCell.Offset(0, 1).Select
    Loop
Loop
End Sub
-------------
Parece que falto indicar que es un trabajo en Excel.
... repito la pregunta...
Tengo una tabla de n filas y n columnas, con datos a los cuales quiero sacarles el promedio. El problema es que no siempre tengo la misma cantidad de filas.
Ejemplo
item      dato1      dato2  dato3......daton
1 10 0 5 4
1 0 8 7 5
1 6 7 9 0
2 7 4 5 0
2 10 8 0 4
3 7 6 10 0
Necesito sacar el promedio del item1, item2, citem3... itemn. ( El numero de columnas para cada item, siempre serán las mismas.
Por favor necesito una orientación...
Juan Alvarez...
Corrección:
Donde escribí:
'como ya se ha encontrado una celda, cuya celda a su derecha esta vacia, termine el bucle Do del recorrido de columnas, y regresando al Do de las columnas y volviendo a empezar, en la fila siguiente, y con valores de 0 en las variables
sería:
'como ya se ha encontrado una celda, cuya celda a su derecha esta vacia, termine el bucle Do del recorrido de columnas, regresando al Do de las filas, volviendo a empezar, en la fila siguiente, y con valores de 0 en las variables

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas