Multiple AverageIf no Excel

1

Eu tenho uma planilha de dados do Excel com muitas e muitas linhas parecidas com

C1    C2    Value
---   ---   -----
 A     C    0.228
 B     D    0.234
 A     D    0.359
 A     C    0.125
...

Eu quero encontrar a média de Value onde C1 = A e C2 = D , qual é a melhor maneira de fazer isso? Eu sei sobre as funções AVERAGEIF e COUNTIF e SUMIF , mas elas não parecem funcionar com várias condições ...

    
por Ben 25.08.2011 / 01:51

2 respostas

4

No Excel 2007 e posterior, você pode usar a função AVERAGEIFS da seguinte forma:

=AVERAGEIFS(C2:C5, A2:A5, "A", B2:B5, "D")
    
por 25.08.2011 / 08:43
1

Você sempre pode usar o idioma VBA embutido. Eu apenas tentei isso e funciona - YMMV.

Ir para Ferramentas | Macro | Editor do Visual Basic.

Uma nova janela será aberta.

Ir para Ferramentas | Referências. Clique na caixa de seleção ao lado de Select Microsoft ActiveX Data Objects 2.5 Library. Clique em Ok.

Clique duas vezes na Planilha1 da lista à esquerda. (O Explorador de Projetos) - sua planilha pode receber um nome diferente.

Copie e cole o código a seguir na janela de código (a janela com as duas listas suspensas na parte superior)

Consulte a linha destacada abaixo - edite-a para certificar-se de definir o caminho completo para a pasta de trabalho do Excel. ou seja:

sXLSFile = "s:\brad\book1.xls"

Clique no menu Executar e, em seguida, clique na opção Executar sub / formulário de usuário (F5).

Todas as coisas sendo iguais (!), você deve obter uma caixa de mensagem com a média das linhas selecionadas - veja a segunda linha destacada abaixo que realmente executa a consulta.

.Open "**select avg(value) from [sheet1$] where c1='A' and c2='D'**"

Você só precisa alterar a linha acima para alterar a consulta. Por exemplo, se você quiser a média, onde C1="B" e C2="A"

Sub Main()

    Dim sXLSFile As String
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset

    ' set the location of the Excel worksheet
    **sXLSFile = "s:\brad\book1.xls"**
    Set cn = New ADODB.Connection
    With cn
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .ConnectionString = "Data Source=" & sXLSFile & ";Extended Properties=Excel 8.0;"
        .Open
    End With

    If Not cn Is Nothing Then
        Set rs = New ADODB.Recordset
        With rs
            Set .ActiveConnection = cn
            .Open "**select avg(value) from [sheet1$] where c1='A' and c2='D'**"
            MsgBox "The average is: " & rs(0)
        End With

    End If

    If Not rs Is Nothing Then
        If rs.State = adStateOpen Then
            rs.Close
        End If
    End If
    Set rs = Nothing

    If Not cn Is Nothing Then
        If cn.State = adStateOpen Then
            cn.Close
        End If
    End If
    Set cn = Nothing

End Sub

Espero que ajude!

Referência: link

    
por 25.08.2011 / 03:31