Multiple AverageIf in Excel

Ho una scheda di dati di Excel con un sacco di righe che sembra qualcosa di simile

C1 C2 Value --- --- ----- AC 0.228 BD 0.234 AD 0.359 AC 0.125 ... 

Voglio trovare la media del Value where C1 = A e C2 = D , qual è il modo migliore per andare a fare questo? So che sono le AVERAGEIF e COUNTIF e SUMIF , ma non sembrano funzionare con più condizioni …

In Excel 2007 e successivi è ansible utilizzare la function AVERAGEIFS, come:

 =AVERAGEIFS(C2:C5, A2:A5, "A", B2:B5, "D") 

È sempre ansible utilizzare il linguaggio VBA incorporato. Ho appena provato questo e funziona – YMMV.

Vai a Strumenti | Macro | Visual Basic Editor.

Verrà aperta una nuova window.

Vai a Strumenti | Riferimenti. Fare clic sulla casella di controllo accanto a Seleziona libreria Microsoft ActiveX Data Objects 2.5. Fai clic su Ok.

Fare doppio clic su Sheet1 dall'elenco a sinistra. (Project Explorer) – il foglio potrebbe essere denominato in modo diverso.

Copiare e incollare il codice riportto di seguito nella window di codice (la window con i due listini a discesa in alto)

Vedere la row evidenziata di seguito – modificarla per assicurarvi di definire il path completo della cartella di lavoro di Excel. vale a dire:

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

Fai clic sul menu Esegui, quindi fai clic sull'opzione Run Sub / Userform (F5).

Tutte le cose sono uguali (!), Dovresti aprire una window di messaggio con la media delle righe selezionate – vedi la seconda linea evidenziata sotto la quale effettua la query.

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

Basta cambiare la row sopra per cambiare la query – per esempio se volete la media where 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 

Spero possa aiutare!

Riferimento: http://support.microsoft.com/kb/257819