3

これはExcel用です。データをフィルタリングした後、個別のレコードをカウントする必要があります。列Aに「名前」を含む330行があり、列BIには、「名前」ごとに実行されたテストの名前があります。各「名前」は、同じテストを数回繰り返すことができます。テスト結果は列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を受験した生徒の一意の数を数えたいと思います。

4

4 に答える 4

3

これを見つけました:

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

Excel フォーラム

あなたの例でテストされ、..動作します:-)

于 2009-11-17T09:36:10.250 に答える
1

入力された配列

{= SUM(IF(FREQUENCY(IF(LEN(A1:A8)> 0、MATCH(A1:A8、A1:A8、FALSE)、 "")、IF(LEN(A1:A8)> 0、MATCH(A1 :A8、A1:A8、FALSE)、 ""))*(B1:B9 = "Exam 1")> 0,1))}

FREQUENCYはソース範囲より1つ多いデータポイントを返すため、列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
于 2009-11-09T16:42:19.090 に答える
0

ここで列 B がどのように収まるかはわかりませんが...

select distinct column_A, count(*)
from table
where column_C = 'A+'
group by column_A
于 2009-11-06T22:34:26.313 に答える
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
于 2009-11-09T13:59:27.220 に答える