Excel 搜索一列以匹配另一列中的数据,并计算出现的次数

Excel 搜索一列以匹配另一列中的数据,并计算出现的次数,excel,formula,Excel,Formula,我已经在网上搜索过了,但找不到任何与此相关的具体信息 我有下面的A列,我需要搜索该列,并找出B列中的数据出现了多少次,在下面的示例中是A 4(70011x3+70014x1) 我需要在Excel中使用什么公式? 提前感谢。。。我不知道是否有一种简单的方法可以用一个工作表函数来实现这一点,但我可以想出两种方法来实现这一点(我很想看看是否有人可以用一个我想不出的简单的工作表函数来实现这一点) 无论哪种方式,我的解决方案都是: 1) 使用数组公式: 这将如下所示: A

我已经在网上搜索过了,但找不到任何与此相关的具体信息

我有下面的A列,我需要搜索该列,并找出B列中的数据出现了多少次,在下面的示例中是A 4(70011x3+70014x1)

我需要在Excel中使用什么公式?
提前感谢

。。。我不知道是否有一种简单的方法可以用一个工作表函数来实现这一点,但我可以想出两种方法来实现这一点(我很想看看是否有人可以用一个我想不出的简单的工作表函数来实现这一点)

无论哪种方式,我的解决方案都是:

1) 使用数组公式: 这将如下所示:

A                        B               C
h323:70011               70011          {=SUM(--ISNUMBER(FIND(B1,$A$1:$A$5,1)))}
70007                    70012          {=SUM(--ISNUMBER(FIND(B2,$A$1:$A$5,1)))}
...etc
请注意,对于此解决方案,您必须在末尾将其作为数组公式键入(按ctrl+shift+enter),但当您向下拖动C列并将其相加时,您将得到正确的总数。 这个问题的挑战在于它并不能在一个单元格中给出答案

2) 使用自定义VBA函数(我的首选方法): 您可以编写自己的VBA函数来轻松实现这一点。 我创建的是:

  Function MyFunc(CriteriaRng As Range, SearchRange As Range) As Double

  Dim CriteriaCl As Range
  Dim SearchCl As Range

  Dim RunningTotal As Double: RunningTotal = 0

     For Each CriteriaCl In CriteriaRng
        For Each SearchCl In SearchRange
        If InStr(1, SearchCl.Value, CriteriaCl.Value) > 0 Then RunningTotal = RunningTotal + 1
        Next SearchCl
     Next CriteriaCl

  MyFunc = RunningTotal

  End Function
然后您所能做的就是在
=myfunc(B1:B5,A1:A5)
中的任何单元格类型中,您将得到正确的答案


希望这有帮助

函数
COUNTIF
采用通配符

使用excel 2007,您可以简单地引用整个列:

=COUNTIF(A:A,"*"&B1&"*")
对于2003或更低版本,必须将范围作为单元格引用放入

=COUNTIF(A1:A2000,"*"&B1&"*")
请注意,数字必须格式化为文本,或者您可以添加countif以覆盖数字

=COUNTIF(A:A,"*"&B1&"*")+COUNTIF(A:A,B1)

然后,您可以在列上使用一个
SUM
来获得总数。

感谢您的建议,我更喜欢使用自定义方法,但在尝试使用该函数时遇到了“无效名称错误”,我已将您的函数放入Excel的“VB”部分,按原样复制。。。这很奇怪-我只是复制并粘贴了我为你键入的内容,效果很好。。。要澄清,请进入VBA编辑器(我通常使用
Alt
+
F11
,创建一个新模块并粘贴到代码中,然后输入我在解决方案中给出的公式-它在我的计算机上运行得非常好…让我知道发生了什么,如果仍然没有,可能是你的excel版本或其他什么…啊,太棒了,它工作了,我不认为我真的创建了一个新的modu。)乐!非常感谢!
=COUNTIF(A:A,"*"&B1&"*")+COUNTIF(A:A,B1)