我想计算包含某个字符串的 Excel 列中的所有唯一值。例如,假设我的专栏中有这个:
strA
strB
strA
strC
diffA
diffB
strC
如果我给这个理论函数写一个值“str”,它将计算包含“str”的唯一值,并返回数字 3。
有什么建议么?网络上充斥着这个问题的一半答案,但我花了一个小时试图找到一个明确的解决方案,所以我认为 StackOverflow 可能会从这个问题中受益。
我想计算包含某个字符串的 Excel 列中的所有唯一值。例如,假设我的专栏中有这个:
strA
strB
strA
strC
diffA
diffB
strC
如果我给这个理论函数写一个值“str”,它将计算包含“str”的唯一值,并返回数字 3。
有什么建议么?网络上充斥着这个问题的一半答案,但我花了一个小时试图找到一个明确的解决方案,所以我认为 StackOverflow 可能会从这个问题中受益。
Option Explicit
Sub Test()
GetCount 1, "str"
End Sub
Sub GetCount(colNum As Integer, str As String)
Dim row As Integer
Dim dict
Set dict = CreateObject("Scripting.Dictionary")
row = 1
Dim key As String
While Cells(row, colNum) <> ""
key = Cells(row, colNum)
If InStr(key, str) And Not dict.Exists(key) Then
dict.Add key, key
End If
row = row + 1
Wend
MsgBox ("the count is " & dict.Count)
End Sub
使用输入样本运行时,结果为 3。循环的终止条件是在列中找到的第一个空单元格。如果逻辑不是你想要的,你可以调整它。
您需要在 VBA 部分中添加对 Microsoft Scripting Runtime 的引用,才能编译和运行此宏。
=SUM(1/COUNTIF(A1:A7,A1:A7)*(LEFT(A1:A7,3)="str"))
使用 Control+Shift+Enter 输入,而不仅仅是 Enter,因为它是一个数组公式。通常要计算列表中唯一项目的数量,您可以输入数组
=SUM(1/COUNTIF(A1:A7,A1:A7))
我将 COUNTIF 部分乘以另一个标准(以 str 开头),以便那些不以字符串开头的部分被视为零。如果您不熟悉数组公式,请参阅
http://www.dailydoseofexcel.com/archives/2004/04/05/anatomy-of-an-array-formula/
我的速度太慢了,但我得到了不同的解决方案:
将要搜索的字符串放在 B1 中,然后作为数组公式输入:
=SUM(NOT(ISERROR(SEARCH(B1;A1:A7)))*(1/COUNTIF(A1:A7,A1:A7))