excel 计算 table 中的整行

excel countif entire row in a table

我在 excel 2016 年有一个结构化的 table。

如果符合我的条件,我想要一个单元格来计算 table 中整行的单元格数量。

我试过将这个公式放在每一行的 A 列中 =COUNTIF(Table[@],"my criteria") 但这样计算不正确。

但是,这有效:=COUNTIF(Table[@[ColB]:[ColH]],"my criteria")。但是由于我的 table 会扩展,所以我不想指定列名 [ColB],我想引用 table.

中的 entre 行
A header countif colC colD colE
First formula A C
Second formula B C

formula = =COUNTIF(Table[@],"A") 不起作用

formula = =COUNTIF(Table[@[colC]:[colE]],"A") 有效

我的 table 将水平和垂直展开。

试试这个:=COUNTIF(B:B,"my citeria"),所以如果你的列是 A,范围是 A:A,对于 B 是 B:B

如果有帮助请告诉我。

Please Note: This solution is only available if you chose to use VBA. VBA does not work in web versions of Excel. Please ensure that you resave your workbook as a macro-enabled workbook before proceeding.

您可以选择使用 VBA 并创建您自己的自定义工作表公式。由于这个问题一开始并不是 VBA 问题,我将更详细地介绍设置过程,而不是只给你一些代码,你必须弄清楚如何处理它.

  1. 将工作簿重新保存为启用宏的工作簿后,按 Alt 和 [=49= 打开 VBA 编辑器 (VBE) ]F11 同时.
  2. 在 VBE 中,单击“插入”>“模块”。您现在应该看到 Module1 在左侧栏(项目资源管理器)中突出显示。
  3. 将以下代码复制并粘贴到模块的空白区域:
Option Explicit

Public Function GetMyRowCount(Criteria As Variant) As Long

    Dim ws As Worksheet
    Dim tblRng As Range, RowRng As Range
    With Application.Caller
        Set ws = .Worksheet
        Set tblRng = ws.Range(.ListObject.Name)
        Set RowRng = ws.Range(ws.Cells(.Row, .Column + 1), ws.Cells(.Row, tblRng.Columns.Count))
    End With
    
    GetMyRowCount = Application.WorksheetFunction.CountIf(RowRng, Criteria)

End Function
  1. 现在在您的工作表中使用此 UDF(用户设计函数)。在您希望进行计算的列中,只需键入 =GetMyRowCount("My Criteria") 即可进行计算。

要更详细地指出此代码的工作原理:

  • Application.Caller指的是这个函数所在的单元格。因为我们现在知道单元格的位置,所以VBA可以使用它的位置来获取行来自它的数据(这就是为什么你不需要行 # 的参数)。

  • RowRng 正在使用第一个 ws.Cells(...) 函数获取 ws.Range(...) 函数中列的起点。 .Row 是来自 GetMyRowCount 函数(使用 Application.Caller.Row 方法)的行 #,而 3 只是静态列 C.

  • 我们获取所需的最后一列的方法是计算 table 中的列总数:ws.Cells(.Row, tblRng.Columns.Count)

使用我们从项目符号 2 和项目符号 3 中获得的信息,我们可以建立我们需要的整个查找范围,然后将这个范围放入您的 CountIf() 函数,连同您通过函数的参数:

GetMyRowCount = Application.WorksheetFunction.CountIf(RowRng, Criteria)

如您在以下示例中所见,我想计算行中数字 1 出现的次数:

另一个示例显示它也可以通过使用“Apple”作为标准来处理文本: