2013-05-01 38 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 

希望這可以讓你獲得足夠的空間來滿足你的需求。

相關問題