计算包含特定文本的单元格而不重复

时间:2013-05-01 16:53:21

标签: excel excel-formula excel-2011

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

示例信息:
拉拉
Lerly PTY LTD
Trang AS TTE
Trerek AS TTE
PRING PTY LTD AS 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。

4 个答案:

答案 0 :(得分:7)

那些拥有“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。向下拖动公式并添加列以获得总计。

答案 1 :(得分:0)

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

          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
 ...

然后总结第三个附加列,对于符合其中一个条件的每一行,其中都有一个。

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

根据您需要计算的复杂程度,您可能更好地使用自定义功能,下面的内容可以扩展为测量多个条件,但因为它会计算任何包含“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

将'或'更改为'和'会计算包含两个字符串的单元格,但要检查单元格是否只包含一次,即排除具有'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

希望这能让你足够到达你需要的地方。