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