计算满足特定条件的Excel电子表格中的唯一行数

时间:2010-09-08 16:34:27

标签: excel vba excel-2007 worksheet-function

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

STRA
STRB
斯特拉
STRC
迪法
diffB
strC

如果我给这个理论函数我正在写一个“str”的值,它会计算包含“str”的唯一值,然后给我3号。

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

3 个答案:

答案 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))