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

时间:2014-08-06 19:52:42

标签: arrays excel excel-formula excel-2010 array-formulas

我有一些重要的计算要做,因为我有一个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 中)对我所有事件(我们在上面的数组中有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是我在搜索的列。

是否有一种非常简单的方法可以使用数组而不是Z1?长度总是相同的(六加一个空格)。

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

3 个答案:

答案 0 :(得分:1)

使用用户定义函数可以相当轻松地完成此操作。下面的函数有两个参数。第一个是构成您上面标记的第二列的范围"处理该事件的人员#34;。第二个是您的列表,它是一个范围,包含您希望计算的每个ID的单个条目。如您的示例所示,如果单个条目中显示多个相同的ID(例如,您的ID 2已重复CC2222两次),则每个ID都会被计算在内。

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

要使用此用户定义函数(UDF),请输入类似

的公式
=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解决方案,您可以使用辅助列。同样,List是一个列,其中包含您要添加的人员列表,每个单元格一个条目。

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

此公式必须数组输入;并且$ A:$ J术语代表计数器,允许B列条目中最多有10个项目。如果可能有更多项目,请根据需要进行扩展:例如:对于最多26个项目,您可以将它们更改为$ A:$ Z

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

尽可能向下填写,然后将该列合并以获得总数。


输入后,

array-enter 一个公式 公式进入单元格或公式栏,按住 ctrl-shift ,同时点击输入。如果你这样做了 正确地说,Excel会在公式周围放置大括号{...}。

答案 1 :(得分:1)

将源数据列拆分为Text to Columns。取消结果,删除中间列并转动剩下的内容。

答案 2 :(得分:0)

我终于根据我的1名员工的工作公式找到了一个完全不同的解决方案:

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

我没有尝试更复杂的事情,而是在我的员工列表中添加了一个新列,其中评估了每个员工的总数(无论如何已经在其他地方需要)。然后,我只需要总结所有员工以获得我的总数。

它并不像我想的那样优雅,我觉得它是一种解决方法,但是因为它是程序化立场上最简单的解决方案,而且无论如何我都需要个人数据,这是我现在真正需要的。< / p>

给所有其他答案的+1但是你的帮助。