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 问题,我将更详细地介绍设置过程,而不是只给你一些代码,你必须弄清楚如何处理它.
- 将工作簿重新保存为启用宏的工作簿后,按 Alt 和 [=49= 打开 VBA 编辑器 (VBE) ]F11 同时.
- 在 VBE 中,单击“插入”>“模块”。您现在应该看到 Module1 在左侧栏(项目资源管理器)中突出显示。
- 将以下代码复制并粘贴到模块的空白区域:
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
- 现在在您的工作表中使用此 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”作为标准来处理文本:
我在 excel 2016 年有一个结构化的 table。
如果符合我的条件,我想要一个单元格来计算 table 中整行的单元格数量。
我试过将这个公式放在每一行的 A 列中 =COUNTIF(Table[@],"my criteria")
但这样计算不正确。
但是,这有效:=COUNTIF(Table[@[ColB]:[ColH]],"my criteria")
。但是由于我的 table 会扩展,所以我不想指定列名 [ColB]
,我想引用 table.
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 问题,我将更详细地介绍设置过程,而不是只给你一些代码,你必须弄清楚如何处理它.
- 将工作簿重新保存为启用宏的工作簿后,按 Alt 和 [=49= 打开 VBA 编辑器 (VBE) ]F11 同时.
- 在 VBE 中,单击“插入”>“模块”。您现在应该看到 Module1 在左侧栏(项目资源管理器)中突出显示。
- 将以下代码复制并粘贴到模块的空白区域:
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
- 现在在您的工作表中使用此 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”作为标准来处理文本: