2013-05-01 78 views
4

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

实施例信息:
拉拉
Lerly PTY LTD
庄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我会做。

回答

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。向下拖动公式并添加列以获取总数。

+0

@pnuts这是后来添加的,我没有注意到编辑。我会修改我的答案。 – Jerry 2013-05-01 17:43:22

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

再总结第三附加列,这将有一个在它其中的条件之一满足每一行。

0

你可以添加一列吗?如果可以,添加一个(也许隐藏)列,说B,用公式一样

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

(在A列假设数据),那么算了笔该列。该公式显然可以包含尽可能多的条件。请注意,我实际上在做的是寻找既不包含术语又不包含它们的线条。

+0

好主意,但大概不是“PTY LTD”两次:-) – pnuts 2013-05-01 17:50:49

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 

希望这可以让你获得足够的空间来满足你的需求。

相关问题