Excel 对不同单元格中的标签进行计数并求和

Excel 对不同单元格中的标签进行计数并求和,excel,tags,sum,Excel,Tags,Sum,所以我在Excel电子表格中有很多行,其中包括不同的内容。基本上是这样的: Element 1 | Element 2 | Tags ------------------------------------------------ Example 1.1 | Example 1.2 | tag1,tag2,tag5 Example 2.1 | Example 2.2 | tag2,tag4,tag6 Example 3.1 | Example

所以我在Excel电子表格中有很多行,其中包括不同的内容。基本上是这样的:

  Element 1    |  Element 2    |  Tags
------------------------------------------------
  Example 1.1  |  Example 1.2  |  tag1,tag2,tag5
  Example 2.1  |  Example 2.2  |  tag2,tag4,tag6
  Example 3.1  |  Example 3.2  |  tag1,tag3,tag6
  Example 4.1  |  Example 4.2  |  tag1,tag3,tag5
  Example 5.1  |  Example 5.2  |  tag1,tag4,tag5
所以忽略前两栏的内容,我想问的是,这并不重要。但是,最后一列(标记),我想计算所有带有标记的行/单元格,然后将其相加,因此(在本例中)我得到以下结果:

tag1: 4
tag5: 3
tag2: 2
tag3: 2
tag4: 2
tag6: 2
所以原则上,只需找出所有选定单元格中每个标签的数量,然后将其相加并吐出每个标签的数量。这可以在Excel中完成吗


提前感谢

我将使用数组公式来执行以下操作:

=SUM(IF(ISNUMBER(SEARCH("tag1", C:C)),1,0))
输入公式后,需要按ctrl+shift+Enter键将公式设置为数组公式。Excel将自动添加花括号“{…}”,以指示其大小和数组公式

这假设您的标记位于c列,根据您的示例,您可以为“tag1”引用一个单元格,例如

其中A10有您的标记值

为了获得标记列表,以下VBA应执行此操作(这将在选定范围内循环,并将结果写入名为“标记”的工作表,您可能需要创建此工作表):


我将使用数组公式来执行此操作,如下所示:

=SUM(IF(ISNUMBER(SEARCH("tag1", C:C)),1,0))
输入公式后,需要按ctrl+shift+Enter键将公式设置为数组公式。Excel将自动添加花括号“{…}”,以指示其大小和数组公式

这假设您的标记位于c列,根据您的示例,您可以为“tag1”引用一个单元格,例如

其中A10有您的标记值

为了获得标记列表,以下VBA应执行此操作(这将在选定范围内循环,并将结果写入名为“标记”的工作表,您可能需要创建此工作表):

您可以使用COUNTIF():

您可以使用COUNTIF():


但这不需要我知道所有标签吗?我目前有大约10000个带有不同标签的单元格。目前我没有所有标记的列表。FWIW数组公式应该避免全列引用,因为每个公式的迭代次数将超过100万次。这可能会拖累计算时间。@DenverDang您需要一个vba字典或集合来遍历每个单元格并收集唯一的标记。@DenverDang我同意Scott的观点,需要一个vba例程,而且我认为他的解决方案会比较简单,我有点想。但是我的VBA技能非常糟糕,所以也许我必须用Python来解决一些问题:D无论如何,谢谢……但是这不需要我知道所有的标记吗?我目前有大约10000个带有不同标签的单元格。目前我没有所有标记的列表。FWIW数组公式应该避免全列引用,因为每个公式的迭代次数将超过100万次。这可能会拖累计算时间。@DenverDang您需要一个vba字典或集合来遍历每个单元格并收集唯一的标记。@DenverDang我同意Scott的观点,需要一个vba例程,而且我认为他的解决方案会比较简单,我有点想。但是我的VBA技能非常差,所以也许我必须用Python来解决一些问题:D无论如何,谢谢。。。
Sub GetTags()
    Dim dict As Scripting.Dictionary
    Set dict = New Scripting.Dictionary
    '
    Dim cellTags() As String
    Dim tag As Variant
    Dim cell As Range
    Dim selectedRange As Range
    Set selectedRange = Application.Selection

    For Each cell In selectedRange.Cells
        cellTags = Split(cell.Value, ",")
        For Each tag In cellTags
            If Not dict.Exists(Trim(tag)) Then
                dict.Add Trim(tag), Trim(tag)
            End If

        Next tag
    Next cell

    Dim StartRow, i As Long
    StartRow = 1
    For i = 0 To (dict.Count - 1)
        ActiveWorkbook.Sheets("Tags").Range("A" & i + StartRow).Value = dict.Items(i)
    Next
End Sub
=COUNTIF(C:C,"*" & "tag1" & "*")