使用具有多个文本条件的Excel Countifs()来确定学生状态

时间:2018-02-12 06:44:55

标签: excel

我有来自一个队列的学生注册数据,涵盖十二个学期。我每个学期都会创建计数器,以显示有多少学生,学期结束,转换专业,或者没有任何前一学期的返回记录。我很难想出有多少学生上学这个学期。到目前为止,我已经尝试了以下公式:

COUNTIFS(B2:B10,"=BIO",C2:C10,"=NONE",D2:F10,"=BIO")

用简单的英语,我将其翻译为: 论点1:如果是上一学期,他们就被注册为BIO专业 参数2:如果这个学期他们没有注册并显示为NONE 论证三:和前一学期他们被注册为BIO主要人数。

以下是我的实际数据的示例模型:

enter image description here

非常感谢任何帮助。提前谢谢。

3 个答案:

答案 0 :(得分:0)

对于COUNTIFS,您不需要添加等号,只需写: =COUNTIFS(B2:B10,"BIO",C2:C10,"NONE",D2:F10,"BIO")

当您的条件相互依赖时,此公式适用,例如,学生将仅在第一学期注册为BIO专业时计数 AND 在第二学期他们未注册 AND 在第3学期,他们注册成为BIO专业。在提供的示例中,有0个这样的情况。 `

答案 1 :(得分:0)

如果我理解了你的问题。

你可以通过这种方式完成它。

使用主要名称创建新列,并根据公式

创建计数

=COUNTIF(G21:J21,"BIO")此公式适用于BIO

可能你可以改变公式专业

答案 2 :(得分:0)

您可以尝试将以下UDF放在标准模块中。这可以整理一下。

功能NotEnrolledCount

参数:

必需student,范围。学生姓名的单元格例如是A2

要求semester,长,学期计算到例如5

可选sameMajor布尔值,默认值为True,例如False

N5

中的示例调用
=NotEnrolledCount(A5,7,TRUE)

返回1

Example UDF call

可选sameMajor允许您指定是否要计算

TRUE其中Maj1, NONE, Maj1 FALSE其中Maj1, NONE, Maj2

注意:出于某种原因,我必须按F9强制UDF有时更新。

这是带有test子的代码,用于调用函数来测试参数。

Option Explicit

Sub TEST()

Dim myCount As Long

myCount = NotEnrolledCount(Range("A9"), 5, False)


End Sub


Public Function NotEnrolledCount(ByVal student As Range, ByVal semester As Long, Optional sameMajor As Boolean = True) As Long

    If semester = 1 Then
        NotEnrolledCount = -1
        MsgBox "At least two semesters must have passed"
        Exit Function
    End If

    Dim semestersRange()
    semestersRange = student.Offset(, 1).Resize(1, semester).Value

    Dim semesterNumber As Long

    For semesterNumber = 2 To UBound(semestersRange, 2) - 1

        Dim lastSemester As String
        lastSemester = UCase(semestersRange(1, semesterNumber - 1))
        Dim nextSemester As String
        nextSemester = UCase(semestersRange(1, semesterNumber + 1))
        Dim currentSemester As String
        currentSemester = UCase(semestersRange(1, semesterNumber))
        Dim semesterOffCount As Long

        If currentSemester = "NONE" And lastSemester <> "NONE" And  _ 
           nextSemester <> "NONE" And nextSemester <> vbNullString Then

            If sameMajor Then

                If nextSemester = lastSemester Then

                    semesterOffCount = semesterOffCount + 1

                End If

            Else

                If nextSemester <> lastSemester Then

                    semesterOffCount = semesterOffCount + 1

                End If

            End If

        End If


    Next semesterNumber

    NotEnrolledCount = semesterOffCount

End Function