No Excel 2007 e posterior, você pode usar a função AVERAGEIFS da seguinte forma:
=AVERAGEIFS(C2:C5, A2:A5, "A", B2:B5, "D")
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 ...
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