2

我想计算包含某个字符串的 Excel 列中的所有唯一值。例如,假设我的专栏中有这个:

strA
strB
strA
strC
diffA
diffB
strC

如果我给这个理论函数写一个值“str”,它将计算包含“str”的唯一值,并返回数字 3。

有什么建议么?网络上充斥着这个问题的一半答案,但我花了一个小时试图找到一个明确的解决方案,所以我认为 StackOverflow 可能会从这个问题中受益。

4

3 回答 3

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 的引用,才能编译和运行此宏。

于 2010-09-08T16:53:59.593 回答
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/

于 2010-09-08T20:11:55.793 回答
0

我的速度太慢了,但我得到了不同的解决方案:

将要搜索的字符串放在 B1 中,然后作为数组公式输入:

=SUM(NOT(ISERROR(SEARCH(B1;A1:A7)))*(1/COUNTIF(A1:A7,A1:A7))
于 2010-09-08T21:16:29.300 回答