克里斯想计算在单元格文本中任何位置包含文本值A或文本值B的单元格。如果该单元格同时包含A和B,则她希望对其进行计数,但只能计数一次。例如,克里斯有三个包含“苹果种子”,“苹果树”和“桃子”的单元格,她想知道包含“苹果”或“种子”的单元格的数量。 (应返回的正确答案是3。)

有许多方法可以解决。在考虑解决方案时,我仅检查了那些避免中间答案的解决方案,这些解决方案占用了其他专栏。第一种解决方案涉及以这种方式使用COUNTIF函数:

=COUNTIF(A1:A9,"apple")+COUNTIF(A1:A9,"seed")

-COUNTIF(A1:A9,"seedapple")-COUNTIF(A1:A9,"appleseed")

该公式计算包含“苹果”或“种子”的所有单元格

然后减去所有包含“种子”的单元格,再减去“苹果”

(两个词都在单元格中)或“苹果”,后跟“种子”(相同的词相反)。

另一个解决方案要短一些,它依赖于COUNTA和FIND函数,如下所示:

=COUNTA(A1:A9)-SUMPRODUCT(--(ISERROR(FIND("apple",A1:A9)))

* --ISERROR(FIND("seed",A1:A9)))

该公式对包含值的单元格进行计数,然后减去所有不包含“ apple”或“ seed”的单元格。

如果愿意,还可以使用Excel的数据库功能之一。

如果您有一个原始短语的列标题,这并不是很难做到的,它会导致最短的公式。您所需要做的就是设置一个相应的条件表。例如,假设您的数据在A1:A9中,并且该列的第一个单元格包含一个标题,例如“我的短语”。在另一列中,应放置相同的标题,然后在其正下方的两个单元格中放置以下两个公式:

apple seed

条件指定您要匹配单元格中包含“ apple”或“ seed”的任何单元格。通过此设置(假设您将条件表放在D1:D3中),可以使用以下公式:

=DCOUNTA(A1:A9,1,D1:D3)

当然,您也可以使用数组公式(通过按Ctrl + Shift + Enter输入)来获取答案。以下是一个这样的公式,该公式再次依赖于在A1:A9中检查的短语:

=SUM(--((ISNUMBER(FIND("apple",A1:A9))+ISNUMBER(FIND("seed",A1:A9)))>0))

如果您更倾向于使用宏,则可以创建一个用户定义的函数来为您返回计数。以下是一个可行的示例:

Function FindTwoStrings(rng As Range, s1 As String, _   s2 As String) As Integer     Application.Volatile     If TypeName(rng) <> "Range" Then Exit Function     Dim cell As Range     For Each cell In rng.Cells         If (InStr(1, UCase(cell.Value), UCase(s1), _           vbTextCompare) > 0) Or (InStr(1, UCase(cell.Value), _           UCase(s2), vbTextCompare) > 0) Then _           FindTwoStrings = FindTwoStrings + 1     Next cell End Function

要使用该函数,可以在单元格中使用以下公式:

=FindTwoStrings(A1:A9,"apple","seed")

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(9326)适用于Office 365中的Microsoft Excel 2007、2010、2013、2016、2019和Excel。您可以在此处为Excel的较早菜单界面找到此技巧的版本: