代码之家  ›  专栏  ›  技术社区  ›  SuperNES

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

  •  2
  • SuperNES  · 技术社区  · 15 年前

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

    斯特拉
    斯特布
    斯特拉
    STRC
    迪瓦
    分流
    STRC

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

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

    3 回复  |  直到 15 年前
        1
  •  1
  •   dcp    15 年前
    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脚本运行时的引用,才能编译和运行此宏。

        2
  •  0
  •   Dick Kusleika    15 年前
    =SUM(1/COUNTIF(A1:A7,A1:A7)*(LEFT(A1:A7,3)="str"))
    

    用control+shift+enter输入,而不仅仅是回车,因为它是一个数组公式。通常,要计算列表中唯一项目的数量,您需要数组输入

    =SUM(1/COUNTIF(A1:A7,A1:A7))
    

    我将countif部分乘以另一个条件(以str开头),这样那些不以字符串开头的将被视为零。如果您不熟悉数组公式,请参见

    http://www.dailydoseofexcel.com/archives/2004/04/05/anatomy-of-an-array-formula/

        3
  •  0
  •   momobo    15 年前

    我太慢了,但我有一个不同的解决办法:

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

    =SUM(NOT(ISERROR(SEARCH(B1;A1:A7)))*(1/COUNTIF(A1:A7,A1:A7))
    
    推荐文章