我有一张包含很多行的 Excel 数据表,看起来像
C1 C2 Value
--- --- -----
A C 0.228
B D 0.234
A D 0.359
A C 0.125
...
Value
我想找到=和=C1
的平均值,最好的方法是什么?我知道and和函数,但它们似乎不适用于多个条件...A
C2
D
AVERAGEIF
COUNTIF
SUMIF
答案1
在 Excel 2007 及更高版本中,您可以使用 AVERAGEIFS 函数,如下所示:
=AVERAGEIFS(C2:C5, A2:A5, "A", B2:B5, "D")
答案2
您始终可以使用内置 VBA 语言。我刚刚尝试过,效果不错 - YMMV。
转到工具 | 宏 | Visual Basic 编辑器。
将打开一个新窗口。
转到工具 | 参考资料。单击选择 Microsoft ActiveX 数据对象 2.5 库旁边的复选框。单击确定。
双击左侧列表中的 Sheet1。(项目资源管理器)- 您的工作表可能有不同的名称。
将以下代码复制并粘贴到代码窗口(顶部有两个下拉列表的窗口)中
请参阅下面突出显示的行 - 编辑它以确保您定义了 Excel 工作簿的完整路径。即:
sXLSFile = "s:\brad\book1.xls"
单击运行菜单,然后单击运行子程序/用户窗体 (F5) 选项。
在所有条件相同的情况下(!),您应该会看到一个弹出消息框,其中显示所选行的平均值 - 请参阅下面实际运行查询的第二行突出显示的内容。
.Open "**select avg(value) from [sheet1$] where c1='A' and c2='D'**"
您只需更改上面的行即可更改查询 - 例如如果您想要 C1 =“B”和 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
希望有帮助!