计算列表中特定单词的数量

我有一些很大的计算要做,因为我有一个Excel文件,列中有一列表示我们系统中每个事件的唯一ID。 我想知道所有事件已经完成的干预总数。 例如,假设我有这个:

ID|People working on that incident ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 0|AA0000 BB1111 CC2222 ZZ1234 1|BB1111 2|CC2222 ZZ1234 CC2222 ZZ1234 3|BB1111 CC2222 AA0000 BB1111 

我有一个名为List的列表 ,其中有一个区域,其中包含我实际要包含的人员ID列表。 例如,假设List = {"AA0000","CC2222"}的第一个区域List = {"AA0000","CC2222"}

现在,我想知道我们的员工( 列表中 )已经对我所有的事件做了多less干预(我们在上面的数组中有4个)。 事件ID 0为6:2,ID 1为0,ID 2为2,ID 3为2。

假设数据是在一个不同的(封闭的)工作簿中,我怎样才能计算出使用我的列表List和上面的范围A1:B4(我想最终使用整个列,所以让我们说A:B)?


编辑:

我已经有了一些工作,计算整个专栏中特定单词的次数。

 SUM( LEN('[myFile.xlsx]Sheet1'!$A:$A) -LEN( SUBSTITUTE('[myFile.xlsx]Sheet1'!$A:$A;$Z$1;"") ) ) /LEN($Z$1) 

Z1是我正在寻找的词(例如:CC2222)和'[myFile.xlsx]Sheet1'!$A:$A是我正在search的列。

是不是有一个非常简单的方法来使这个数组而不是Z1的工作? 长度总是相同的(六加一个空格)。

资料来源: http : //office.microsoft.com/en-ca/excel-help/count-the-number-of-words-in-a-cell-or-range-HA001034625.aspx

将您的源数据ColumnB与文本拆分为列。 取消转换结果,删除中间的一列并转动剩下的部分。

用户定义函数可以很容易地做到这一点。 下面的函数有两个参数。 第一个是构成你的第二栏的范围,标题是“在这个事件上工作的人”。 第二个是您的列表,这是一个范围,包括您希望统计的每个ID的单个条目。 如您的示例所示,如果在单个条目中显示多个相同的ID(例如,您的ID 2具有CC2222重复两次),则会对它们各自进行计数。

要input这个用户定义函数(UDF),打开Visual Basic编辑器。 确保您的项目在“项目浏览器”窗口中突出显示。 然后,从顶部菜单中select插入/模块,然后将下面的代码粘贴到打开的窗口中。

要使用这个用户定义函数(UDF),input一个像

 =InterventionCount(B2:B5,H1:H2) 

在一些细胞。

 Option Explicit Function InterventionCount(myRange As Range, myList As Range) As Long Dim RE As Object, MC As Object Dim vRange As Variant, vList As Variant Dim sPat As String Dim I As Long vRange = myRange vList = myList If IsArray(vList) Then For I = 1 To UBound(vList) If Not vList(I, 1) = "" Then _ sPat = sPat & "|" & vList(I, 1) Next I Else sPat = "|" & vList End If sPat = "\b(?:" & Mid(sPat, 2) & ")\b" Set RE = CreateObject("vbscript.regexp") With RE .Global = True .ignorecase = True .Pattern = sPat End With For I = 1 To UBound(vRange) Set MC = RE.Execute(vRange(I, 1)) InterventionCount = InterventionCount + MC.Count Next I End Function 

对于非VBA解决scheme,您可以使用助手列。 同样,列表是一个单列,其中包含您要添加的人员列表,每个单元格一个条目。

如果您的数据在列B中,则添加一列并在B2中input此公式:

这个公式必须是数组input的 ; 而$ A:$ J术语表示一个计数器,允许在B列中的条目中允许多达10个条目。如果可能多于该条目,则根据需要展开:例如,对于多达26个条目,您可以将它们更改为$ A :$ž

 =SUM(N(TRIM(MID(SUBSTITUTE(B2," ",REPT(" ",99)),(COLUMN($A:$J)=1)+(COLUMN($A:$J)>1)*(COLUMN($A:$J)-1)*99,99))=(List))) 

根据需要填写下列内容,然后合计栏以获得总计。


数组input公式,在将公式input到单元格或公式栏后,按住Ctrl键并按Enter键 。 如果你这样做是正确的,Excel将把括号{…}放在公式的周围。

我终于find了一个完全不同的解决scheme,根据我的工作公式为一名员工:

 SUM( LEN('[myFile.xlsx]Sheet1'!$A:$A) -LEN( SUBSTITUTE('[myFile.xlsx]Sheet1'!$A:$A;$Z$1;"") ) ) /LEN($Z$1) 

我并没有尝试更复杂的东西,而是在员工名单上添加了一个新列,其中每个员工都会评估总计(无论如何,这个列已经是其他地方了)。 那么,我只需要总结所有的员工就可以得到我的总数。

它不是我想要的那样高雅,我觉得这是一个解决方法,但是因为它是从编程的angular度来看最简单的解决scheme,无论如何我都需要单个数据,所以现在我真的需要这些。

+1为所有其他答案,虽然你的帮助。