Como mostrar en una celda el promedio calculado de un rango filtrado previamente, ejm sueldo de empleados tipo 1 en macros.

Por ejemplo tengo una macro en excel que me filtra en otra hoja los datos de empleados de determinado rango de sueldo y área, pero quiero promediar estos sueldos filtrados y colocarlos en una celda sueldo promedio.

La imagen adjunta es el filtro que hace la macro, ¿pero qué comando utilizar para el sueldo promedio?

Private Sub BtnFiltrar_Click()
On Error GoTo ErrorFiltro
Dim fila1 As Integer
Dim fila2 As Integer
Dim StrArea As String
Dim Registros As Integer
Dim sglSueldo As Single
Dim Spromedio As Single

fila1 = 5
fila2 = 5
StrArea = CboAreas.Text
sglSueldo = TxtSueldo.Text

Sheets("Hoja2").Range("Filtro1").Clear
Do While Cells(fila1, 1) <> ""
    If Cells(fila1, 8) = StrArea And Sheets("Hoja1").Cells(fila1, 10) > sglSueldo Then
    Sheets("Hoja2").Cells(fila2, 1) = Sheets("Hoja1"). Cells(fila1, 1)
    Sheets("Hoja2").Cells(fila2, 2) = Sheets("Hoja1"). Cells(fila1, 2)
    Sheets("Hoja2").Cells(fila2, 3) = Sheets("Hoja1"). Cells(fila1, 3)
    Sheets("Hoja2").Cells(fila2, 4) = Sheets("Hoja1"). Cells(fila1, 4)
    Sheets("Hoja2").Cells(fila2, 5) = Sheets("Hoja1"). Cells(fila1, 5)
    Sheets("Hoja2").Cells(fila2, 6) = Sheets("Hoja1"). Cells(fila1, 6)
    Sheets("Hoja2").Cells(fila2, 7) = Sheets("Hoja1"). Cells(fila1, 7)
    Sheets("Hoja2").Cells(fila2, 8) = Sheets("Hoja1"). Cells(fila1, 9)
    Sheets("Hoja2").Cells(fila2, 9) = Sheets("Hoja1"). Cells(fila1, 10)
    fila2 = fila2 + 1
    Registros = Registros + 1
    End If
    fila1 = fila1 + 1
Loop
MsgBox "Se copiaron a la Hoja2: " & Registros & " Registros"
Sheets("Hoja2").Range("B2").Value = StrArea
Sheets("Hoja2").Range("D2").Value = TxtSueldo
Sheets("Hoja2").Range("F2").Value = Spromedio
Sheets("Hoja2").Select
Unload Me

Exit Sub
ErrorFiltro:
MsgBox "Error..." & Err.Description
End Sub

2 Respuestas

Respuesta

Cambia esta línea

Sheets("Hoja2").Range("F2").Value = Spromedio

Por esta otra

Sheets("Hoja2").Range("F2").FormulaLocal = "=PROMEDIO(9;F5:F1000)"

Ten en cuenta que en la fórmula que he puesto, el separador es ;

Si utilizas, como separador deberás cambiarlo

Respuesta

H o l a:

Te paso la macro actualizada asumiendo que SUELDO a promediar es la columna i a partir de fila 5 de la Hoja2

Private Sub BtnFiltrar_Click()
On Error GoTo ErrorFiltro
Dim fila1 As Integer
Dim fila2 As Integer
Dim StrArea As String
Dim Registros As Integer
Dim sglSueldo As Single
fila1 = 5
fila2 = 5
StrArea = CboAreas.Text
sglSueldo = TxtSueldo.Text
Sheets("Hoja2").Range("Filtro1").Clear
Do While Cells(fila1, 1) <> ""
    If Cells(fila1, 8) = StrArea And Sheets("Hoja1").Cells(fila1, 10) > sglSueldo Then
    Sheets("Hoja2").Cells(fila2, 1) = Sheets("Hoja1"). Cells(fila1, 1)
    Sheets("Hoja2").Cells(fila2, 2) = Sheets("Hoja1"). Cells(fila1, 2)
    Sheets("Hoja2").Cells(fila2, 3) = Sheets("Hoja1"). Cells(fila1, 3)
    Sheets("Hoja2").Cells(fila2, 4) = Sheets("Hoja1"). Cells(fila1, 4)
    Sheets("Hoja2").Cells(fila2, 5) = Sheets("Hoja1"). Cells(fila1, 5)
    Sheets("Hoja2").Cells(fila2, 6) = Sheets("Hoja1"). Cells(fila1, 6)
    Sheets("Hoja2").Cells(fila2, 7) = Sheets("Hoja1"). Cells(fila1, 7)
    Sheets("Hoja2").Cells(fila2, 8) = Sheets("Hoja1"). Cells(fila1, 9)
    Sheets("Hoja2").Cells(fila2, 9) = Sheets("Hoja1"). Cells(fila1, 10)
    fila2 = fila2 + 1
    Registros = Registros + 1
    End If
    fila1 = fila1 + 1
Loop
MsgBox "Se copiaron a la Hoja2: " & Registros & " Registros"
Sheets("Hoja2").Range("B2").Value = StrArea
Sheets("Hoja2").Range("D2").Value = TxtSueldo
Set h2 = Sheets("Hoja2")
u = h2.Range("F" & Rows.Count).End(xlUp).Row
    h2.Range("F2") = WorksheetFunction.Average(Range("I5:I" & u))
Sheets("Hoja2").Select
Unload Me
Exit Sub
ErrorFiltro:
MsgBox "Error..." & Err.Description
End Sub

Me comentas

Muchas Gracias por la información, fue de mucha utilidad.

¡Gracias! 

Si fue útil, hay 2 formas de valorar mi respuesta Excelente o bueno saludos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas