Excel 对不同单元格中的标签进行计数并求和
所以我在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
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" & "*")