【问题标题】:Count rows where value exists in Column A and other value exists in Column B计算 A 列中存在值且 B 列中存在其他值的行
【发布时间】:2014-10-28 20:54:14
【问题描述】:

我在 Excel 2011 中使用 VBA(但保存到 Excel 97 - 2004)来计算 C 列中值为training 的所有匹配值。为此,我使用以下代码:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$A$1" Then

    Dim r As Range
    Dim c
    Set r = Sheets("Sheet2").Range("C:C")
    c = Application.WorksheetFunction.CountIf(r, "training")
    MsgBox "column C has " & c & " instances of 'training'"

    End If
End Sub

但是我想做的是创建一个 CountIfs 语句,它允许我检查值“training”是否存在于 C 列中,以及值 10 是否存在于另一个 B 列中,如果两者在同一行中匹配,那么计算两个值都存在的所有行,否则不计算。

有人能帮我解决这个问题吗?

【问题讨论】:

  • 我目前使用 excel for mac 2011,但我将工作簿保存在 excel 97 到 2004 中,因为它需要与 windows 中的 excel 2010 兼容

标签: excel vba count excel-2011


【解决方案1】:

类似于Count if two criteria match - EXCEL formula,你需要一个COUNTIFS函数

=COUNTIFS(B2:B7, 10, C2:C7, "training")

编辑

没有看到关于 Excel 版本的更新; COUNTIFS 适用于 2007 +

SUMPRODUCT 在 2004 年之前工作吗?

=SUMPRODUCT((B2:B7=10)*(C2:C7="training"))

VBA,我刚刚测试了它,它对我有用:

    myTest = Evaluate("=SUMPRODUCT((B2:B7=10)*(C2:C7=""training""))")

【讨论】:

  • 我不想在公式中使用这个,但理想情况下需要一个 vba 解决方案
【解决方案2】:

我设法解决了。请看下面的例子

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$A$1" Then

Dim r As Range
Dim p As Range
Dim t As Range
Dim u As Range
Dim c
Set r = Sheets("Sheet2").Range("C:C")
Set p = Sheets("Sheet2").Range("B:B")
Set t = Sheets("Sheet1").Range("B1")
Set u = Sheets("Sheet1").Range("C1")
c = WorksheetFunction.CountIfs(r, t, p, u)
MsgBox "column C has " & c & " instances of 'training'"

End If
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多