这是针对Excel的:在我过滤数据后,我的任务是计算不同的记录。我有330行,其中A列包含'name',而在B列中,我有一个为每个'name'完成的测试的名称,每个'name'可以进行多次相同测试的迭代。测试结果在C栏中。
Col A -Student Col B -Exam Col C - Grade
Student 1 Exam 1 .80
Student 2 Exam 1 .50
Student 3 Exam 1 .90
Student 2 Exam 1 .75
Student 4 Exam 1 .90
Student 5 Exam 1 .55
Student 2 Exam 2 .90
Student 1 Exam 2 .90
.... .... ...
如果我过滤考试1的作业B,我想计算参加考试1的学生的唯一数量。
答案 0 :(得分:3)
发现这个:
=SUMPRODUCT((A1:A30000<>"")/COUNTIF(A1:A30000,A1:A30000&""))
Excel Forum 上的
在您的示例中测试并且..它的工作原理: - )
答案 1 :(得分:1)
输入数组
{= SUM(IF(频率(IF(LEN(A1:A8)大于0,MATCH(A1:A8,A1:A8,FALSE), “”),IF(LEN(A1:A8)&GT; 0,MATCH(A1:A8,A1:A8,FALSE), “”))*(B1:B9 =“考试 1" )&GT; 0,1))}
请注意,由于FREQUENCY返回的数据点多于源范围,因此B列范围实际上是B1:B9,这仅在B9不等于考试1时才有效。
如果您希望每次都将条件基于过滤而不是某个列,我不知道如何使用公式。如果你不反对VBA,你可以使用这个简单的UDF。
Public Function CountUniqueFiltered(rColumn As Range) As Long
Dim rCell As Range
Dim colUnique As Collection
Set colUnique = New Collection
For Each rCell In rColumn.Cells
If Not rCell.EntireRow.Hidden Then
On Error Resume Next
colUnique.Add rCell.Value, CStr(rCell.Value)
On Error GoTo 0
End If
Next rCell
CountUniqueFiltered = colUnique.Count
End Function
答案 2 :(得分:0)
我不确定B列是如何适合的,但是......
select distinct column_A, count(*)
from table
where column_C = 'A+'
group by column_A
答案 3 :(得分:0)
符合thursdaysgeek
strFile = Workbooks(1).FullName
''Note HDR=Yes, so column names can be used
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile _
& ";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
Set cn = CreateObject("ADODB.Connection")
cn.Open strCon
Set rs = CreateObject("ADODB.Recordset")
strSQL = "SELECT DISTINCT Student, Exam FROM [Sheet4$] " _
& "WHERE Exam='Exam 1'"
rs.Open strSQL, cn
For i = 0 To rs.Fields.Count - 1
Sheets("Sheet5").Cells(1, i + 1) = rs.Fields(i).Name
Next
Sheets("Sheet5").Cells(2, 1).CopyFromRecordset rs