Filtrando y luego contando valores distintos

Esto es para Excel: me han encargado contar loggings distintos después de haber filtrado los datos. Tengo 330 filas con la columna A que contiene el 'nombre' y en la columna BI tengo el nombre de una testing que se hizo para cada 'nombre', que cada 'nombre' podría haber tomado varias iteraciones de la misma testing. Los resultados de la testing están en la Columna 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 .... .... ... 

Si filter col B para el examen 1, quiero contar el número único de estudiantes que han tomado el examen 1.

Encontró esto:

 =SUMPRODUCT((A1:A30000<>"")/COUNTIF(A1:A30000,A1:A30000&"")) 

en el foro de Excel

Probado en tu ejemplo y … funciona 🙂

Matriz ingresada

{= SUMA (SI (FRECUENCIA (SI (LEN (A1: A8)> 0, PARTIDO (A1: A8, A1: A8, FALSO), ""), IF (LEN (A1: A8)> 0, PARTIDO (A1 : A8, A1: A8, FALSO), "") * (B1: B9 = "Examen 1")> 0,1))}

Tenga en count que dado que FREQUENCY devuelve un punto de datos más que el range fuente, el range de la columna B es realmente B1: B9 y esto solo funciona si B9 no es igual al Examen 1.

Si desea basar la condición en lo que se filtra en lugar de en una determinada columna cada vez, no sé cómo hacerlo con una fórmula. Si no eres reacio a VBA, puedes usar este sencillo UDF.

 Public Function CountUniqueFiltenetworking(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 CountUniqueFiltenetworking = colUnique.Count End Function 

No estoy seguro de cómo la columna B encaja aquí, pero …

 select distinct column_A, count(*) from table where column_C = 'A+' group by column_A 

En línea con 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