如何在excel中计算包含文本的单元格数量?
上周,我的一位读者向我询问一个简单的公式,他可以用它来计算带有文本的单元格。基本上,他试图找出最好的方法。
但如果你想一想。在 Excel 中,您可以使用不同的公式来计算包含文本值的所有单元格。但重点是你应该使用哪一个。
我认为这取决于具体情况。这里您需要了解的一件事是,带有文本的单元格是指没有数字、空白单元格或错误的任何单元格。
今天在这篇文章中,我想分享 6 种在不同情况下对带有文本的单元格进行计数的不同方法。
1. 使用通配符的 COUNTIF 对包含文本值的单元格进行计数
对包含文本的单元格进行计数的最佳公式是带有通配符(* – 星号)的 COUNTIF。在下面的数据表中,单列中包含姓名和手机号码的列表。从这个列表中,您需要计算具有名称(文本)的单元格的数量。公式为:
=COUNTIF(A2:A20,"*")
当您输入它时,它将返回仅包含文本的单元格数量。
这就是这个公式的工作原理
在这里,我们使用 COUNTIF 来对具有特定条件的单元格进行计数,对于条件,我们使用星号。当您使用星号时,它会计算包含除逻辑值、数字(如果不是作为文本输入)和错误之外的任意数量字符的单元格。
注意:如果某些单元格中只有空格,则该单元格将被计为文本。因此,您可以像这样修改您的公式。
=COUNTIFS(A2:A20,"*",A2:A20,"<> ")
2. SUMPRODUCT 和 ISTEXT 计算带有文本的单元格数量
要计算包含文本的单元格数量,您还可以通过组合 SUMPRODUCT 和 ISTEXT 创建公式。公式为:
=SUMPRODUCT(--ISTEXT(A2:A20))
当您输入它时,它将返回包含文本的单元格数量。
这就是这个公式的工作原理
要理解这个公式,您需要将其分为三个不同的部分。
首先,您使用 ISTEXT 检查单元格是否包含文本。这里 ISTEXT返回一个数组,其中对于所有单元格,对于包含文本的单元格为 TRUE,对于所有其他单元格为 FALSE。
其次,添加两个减号将 TRUE/FALSE 数组转换为 1/0。现在,对于所有带有文本的单元格,您为所有其他单元格设置 1 和 0。
第三,您使用 SUMPRODUCT 对该数组求和。这个总和是包含文本的单元格的数量。
此处使用 SUMPRODUCT 的优点是您无需以表格形式输入公式。
3. 具有特定文本的单元格计数公式
现在让我们更深入地挖掘一下。假设您需要对包含特定文本的单元格进行计数。这是一个例子。在下面的数据表中,您需要计算包含“John”的单元格。为此,公式为:
=COUNTIF(A2:A20,"John")
此公式将返回您指定的文本所在的单元格数。
4. 包含部分文本的单元格
当您需要通过匹配部分文本来对单元格进行计数时,有时会发生这种情况。而且,COUNTIF 和通配符可以帮助您实现这一点。
请参阅下表,其中包含产品名称和发票号码。从那里您需要计算“Product-A”的细胞数量。使用下面的公式:
=COUNTIF(A2:A20,"Product-A*")
此公式将返回包含“Product-A”的单元格数。
5. 区分大小写的文本
现在有不同的事情了。您需要对具有特定文本的单元格进行计数,并且该数字应该区分大小写。
在下表中,您需要计算名称为“JOHN”的单元格,但这里您有相同的名称,均为小写字母,但数字应为大写。
为此,您可以将 SUMPRODUCT 与 EXACT 结合起来。
=SUMPRODUCT(--EXACT("JOHN",A1:A20))
它将返回包含“JOHN”的单元格数量。
这个公式是如何运作的?
要理解这个公式,您需要将其分为三个不同的部分。
首先,您使用 EXACT 将整个单元格范围与文本“JOHN”进行比较。它返回一个数组,其中“JOHN”的单元格为 TRUE,忽略“john”、“John”和所有其他单元格。
其次,添加一个双减号将此 TRUE/FALSE 数组转换为 1/0。现在,对于所有带有“JOHN”的单元格,所有其他单元格的值为 1 和 0。
第三,您使用 SUMPRODUCT 对该数组求和。这个总和就是包含“JOHN”的单元格的数量。
5. VBA对带有文本的单元格进行计数
使用宏代码可以节省大量时间。下面的代码将帮助您计算所选内容和整个工作表中包含文本的单元格数量。
供选择:
Sub countTextSelection() Dim rng As Range Dim i As Integer For Each rng In Selection If Application.WorksheetFunction.IsText(rng) Then i = i + 1 End If Next rng MsgBox i End Sub
整个电子表格:
Sub countTextWorksheet() Dim rng As Range Dim i As Integer For Each rng In ActiveSheet.UsedRange If Application.WorksheetFunction.IsText(rng) Then i = i + 1 End If Next rng MsgBox i End Sub
相关: Excel 中的 VBA 是什么
结论
我确信所有这些方法足以让您在给定情况下对带有文本的单元格进行计数。您可以使用任何您认为最适合您的方法。
对于大多数情况,第一种方法是没有问题的。但是,如果您想更进一步,可以使用其他方法。对我来说,VBA 可以节省大量时间,因为我不必应用公式。现在轮到你告诉我一些事情了。
您还有另一种方法可以用来计算带有文本的单元格数量吗?
请务必在评论部分与我分享您的想法,我很乐意听取您的意见。请不要忘记与您的朋友分享这篇文章,我相信他们会喜欢的。