检查两个文本值中的任何一个(Microsoft Excel)
克里斯想计算在单元格文本中任何位置包含文本值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的较早菜单界面找到此技巧的版本: