我想计算包含特定字符串的Excel列中的所有唯一值。例如,假设我在我的专栏中有这个:
STRA
STRB
斯特拉
STRC
迪法
diffB
strC
如果我给这个理论函数我正在写一个“str”的值,它会计算包含“str”的唯一值,然后给我3号。
有什么建议吗?网络充满了这个问题的半答案,但我花了一个小时试图找到一个明确的解决方案,所以我认为StackOverflow可能会从这个问题中受益。
答案 0 :(得分:1)
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的引用,以便编译和运行此宏。
答案 1 :(得分:0)
=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/
答案 2 :(得分:0)
我太慢了,但我得到了一个不同的解决方案:
将字符串放入B1中搜索,然后输入为数组公式:
=SUM(NOT(ISERROR(SEARCH(B1;A1:A7)))*(1/COUNTIF(A1:A7,A1:A7))