【问题标题】:Counting cells that contain a certain bit of text without duplicates计算包含一定文本且不重复的单元格
【发布时间】:2013-05-01 16:53:20
【问题描述】:

我需要计算一列中包含特定文本位的单元格的数量。实际上,我会做多个这样的计数,我需要删除重复项。

示例信息:
拉拉
Lerly PTY LTD
董里 AS TTE
Trerek AS TTE
PRING PTY LTD 作为 TTE
Treps PTY LTD
梁 AS TTE
Praderpis PTY LTD AS TTE

我需要计算“AS TTE”出现的次数,以及“PTY LTD”出现的次数。但是,我只想计算一次同时包含“AS TTE”和“PTY LTD”的单元格。

到目前为止我有这个:

(COUNTIF(F4:F1000,"*AS TTE*") + COUNTIF(F4:F1000, "*PTY LTD*"))

但是,这会计算重复项。

编辑:我应该澄清一下,我的用途比我列出的要复杂得多,所以它不像简单地减去另一个同时具有它们的 COUNTIF 那样简单。我还有很多其他的 COUNTIF 要做。

【问题讨论】:

    标签: excel excel-formula excel-2011


    【解决方案1】:

    具有“AS TTE”和“PTY LTD”的那些是否总是按“PTY LTD AS TTE”的顺序排列?

    如果是这样,您可以添加:

    COUNTIF(F4:F1000,"*PTY LTD AS TTE*")

    你的净公式是:

    (COUNTIF(F4:F1000,"*AS TTE*") + COUNTIF(F4:F1000, "*PTY LTD*") - COUNTIF(F4:F1000,"*PTY LTD AS TTE*"))
    

    编辑:如果你不能简单地做另一个COUNTIF,你也许可以在你有公式的地方添加列:

    =IF(AND(ISERROR(FIND("AS TTE",E4)),ISERROR(FIND("PTY LTD",E4))),0,1)

    如果“AS TTE”或“PTY LTD”在单元格 F4 中,这将插入 1,否则将插入 0。向下拖动公式并添加列以获取总数。

    【讨论】:

    • @pnuts 这是后来添加的,我没有注意到编辑。我会修改我的答案。
    【解决方案2】:

    您可以在输入数据表中添加三个额外的列:

              A
     1 | Lerly PTY LTD | =COUNTIF(A1,"*PTY LTD*") | =COUNTIF(A1,"*AS TTE*") | =B1+C1-B1*C1
     2 | Trang AS TTE  | =COUNTIF(A2,"*PTY LTD*") | =COUNTIF(A2,"*AS TTE*") | =B2+C2-B2*C2
     ...
    

    然后总结第三个附加列,对于满足其中一个条件的每一行,该列将有一个列。

    【讨论】:

      【解决方案3】:

      你能添加一列吗?如果可以的话,添加一个(可能是隐藏的)列,比如 B,使用类似的公式

      =if(and(iserror(find("PTY LTD",A1)),iserror(find("PTY LTD",A1))),0,1)
      

      (假设 A 列中的数据)然后对该列求和。该公式显然可以包含任意数量的条件。请注意,我实际上在做的是寻找不包含任何术语的行并将它们从总和中省略。

      【讨论】:

        【解决方案4】:

        根据您需要计数的复杂程度,您可能会更好地使用自定义函数,下面可以扩展以衡量许多标准,但因为它将计算包含“AS TTE”或“的任何单元格PTY LTD",但将每个单元格计为 1:

        Public Function CountIfExt(Rng As Range, str1 As String, str2 As String) As Long
        
        Dim c As Range
        Dim x As Long
        
        For Each c In Rng
            If InStr(c.Value, str1) > 0 Or InStr(c.Value, str2) > 0 Then
                x = x + 1
            End If
        Next c
        
        CountIfExt = x
        
        End Function
        

        将 'Or' 更改为 'And' 将对包含 both 字符串的单元格进行计数,但要检查单元格是否只包含一次,即排除具有 'Trang AS TTE PTY LTD AS 的单元格TTE' 然后:(重新阅读您的问题后,我认为这不是您所追求的,而是展示您如何扩展该功能......)

        Public Function CountIfExt(Rng As Range, str1 As String, str2 As String) As Long
        
        Dim c As Range
        Dim x As Long
        Dim lstr1 As Long, lstr2 As Long
        
        For Each c In Rng
            lstr1 = InStr(c.Value, str1)
            lstr2 = InStr(c.Value, str2)
            If lstr1 > 0 And lstr2 > 0 Then
                If InStr(lstr1 + 1, c.Value, str1) = 0 _
                        And InStr(lstr2 + 1, c.Value, str2) = 0 Then
                    x = x + 1
                End If
            End If
        Next c
        
        CountIfExt = x
        
        End Function
        

        希望这足以让您到达您需要的地方。

        【讨论】:

          猜你喜欢
          • 2012-09-13
          • 2015-03-05
          • 1970-01-01
          • 1970-01-01
          • 2019-03-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多