2017-05-05 68 views
1

這使我的大腦融化。Excel - 兩列(A)公司(B)團隊成員。需要確定哪些公司沒有團隊成員a,c和c

這是我試圖實現的模擬。

我從Excel中的數據庫提取數據。 A列是公司。 B欄是團隊成員。

結構是這樣的,例如,公司a被顯示四次,因爲它有四個團隊成員,成員a,c,f和d。

目標:我想確定所有不包含團隊成員a,b和c的公司。理想情況下,這將使用公式而不是VBA。

真的希望有人不介意花時間來幫忙。

下面的示例數據,我無法弄清楚如何粘貼它作爲表,所以我已經將列值粘貼爲兩個單獨的字符串。

+----------+----------+ 
| Column A | Column B | 
+----------+----------+ 
| a  | a  | 
| a  | c  | 
| a  | f  | 
| a  | d  | 
| b  | g  | 
| b  | e  | 
| b  | a  | 
| b  | c  | 
| c  | r  | 
| c  | a  | 
| c  | b  | 
| c  | d  | 
| c  | e  | 
| c  | h  | 
| c  | t  | 
| d  | e  | 
| d  | f  | 
| d  | d  | 
| d  | s  | 
| d  | w  | 
| d  | q  | 
| e  | f  | 
| e  | a  | 
| e  | b  | 
| e  | r  | 
| e  | w  | 
| f  | u  | 
| f  | k  | 
| f  | n  | 
| f  | p  | 
| f  | l  | 
| g  | h  | 
| g  | a  | 
| g  | c  | 
| g  | e  | 
| g  | r  | 
| g  | g  | 
| h  | v  | 
| h  | c  | 
| h  | d  | 
| h  | a  | 
| h  | e  | 
| h  | r  | 
| h  | t  | 
| h  | g  | 
| i  | n  | 
| i  | g  | 
| i  | e  | 
| i  | y  | 
| i  | n  | 
| j  | r  | 
| j  | w  | 
| j  | j  | 
| j  | u  | 
| k  | y  | 
| k  | h  | 
| k  | k  | 
| k  | u  | 
| k  | b  | 
| l  | g  | 
| l  | j  | 
| l  | l  | 
| l  | u  | 
+----------+----------+ 

非常感謝,

馬特。

+0

你怎麼想顯示「公司不包含團隊成員,b和c」 ??? –

回答

0

一個簡單IF式中Column C

=IF(AND(B1<>"a",B1<>"b",B1<>"c"),A1,"")

並拖動它在整個範圍內。這將顯示所有沒有團隊成員a,b和c的公司。這可能包含重複的公司名稱,您可能必須單獨將其刪除。

0

你在這裏。將該公式複製到包含公司和團隊數據的每一行的C列中。

=IF(INDIRECT("A"&ROW())<>INDIRECT("A"&ROW()-1),IF(SUM(COUNTIF(INDIRECT("B" & ROW() & ":B" & ROW() + COUNTIF($A:$A, INDIRECT("A"&ROW())) - 1), {"a","b","c"})) > 0, "", CONCATENATE("Company ", INDIRECT("A"&ROW()), " does not contain Team Members a, b, or c")), "") 

下面是這個公式正在做什麼的細目。

首先讓我們瞭解INDIRECT的用法。這將根據列的硬編碼「A」或「B」爲正確單元格創建引用,然後使用ROW()找到當前行號。這允許您將公式放置在行中的任何位置,而無需擔心必須重做列引用。

因此,舉例來說,如果在評估一行6闡明的公式是這樣的:

  1. IF(INDIRECT("A"&ROW())<>INDIRECT("A"&ROW()-1)
    • 如果A6不等於A5再繼續,否則顯示爲空白。
      • (這是我們如何知道,如果我們正在評估一個新公司)
  2. COUNTIF($A:$A, INDIRECT("A"&ROW()))
    • 計數等於A6細胞在A列的數量。
  3. (COUNTIF(INDIRECT("B" & ROW() & ":B" & ROW() + ... - 1), {"a","b","c"})
    • 計數的時間 「A」 的數量, 「b」 的,或 「c」 發生在經過A9的範圍A6。
  4. IF(SUM(...) > 0, "", ...
    • 如果上述計數的總和大於零,則是空白的,否則顯示我們成功的消息。
  5. CONCATENATE("Company ", INDIRECT("A"&ROW()), " does not contain Teams a, b, or c")
    • 構建使用INDIRECT才能到公司名稱的引用我們成功的消息。

輸出看起來像這樣。

enter image description here

這就是它!

+0

啊,謝謝。我誤解了這個問題的意思是'或'而不是'和',這對團隊成員來說。我不知道要避免「間接」。我很想好好了解更多。 –

+1

重讀這篇文章之後並不是非常詳細,對我來說'不包含團隊成員a,b和c'意味着所有這三個人都必須在公司裏面不算數,我可能是錯的。查找易失性函數。每次執行excel reclalcs時都會重新計算volatile函數。基礎數據更改時,非易失性函數只能重新計算。它強制執行大量不需要的計算。即使計算被另一個工作簿調用,易失性函數也會重新計算。 –

+1

你的公式沒有間接。在C2中複製並複製/下拉:'= IF(A2 <> A1,IF(SUM(COUNTIF($ B2:INDEX(B:B,ROW()+ COUNTIF($ A:$ A,A2) - 1) ,「a」,「b」,「c」}))<> 0,「」,CONCATENATE(「Company」,A2,「不包含團隊成員a,b或c」)),「」) ' –

0

這裏是一個數組公式,這會做,所有三個必須存在忽視:

=IFERROR(INDEX($A$2:$A$64,MATCH(1,(COUNTIFS($A$2:$A$64,$A$2:$A$64,$B$2:$B$64,"a")*COUNTIFS($A$2:$A$64,$A$2:$A$64,$B$2:$B$64,"b")*COUNTIFS($A$2:$A$64,$A$2:$A$64,$B$2:$B$64,"c")=0)*(COUNTIF($E$1:E1,$A$2:$A$64)=0),0)),"") 

放入E2,按Ctrl-Shift鍵輸入,而不是Enter鍵確認數組公式。如果做得正確,Excel將在公式周圍放置{}

然後拖/複製下來。

![enter image description here


如果你想,或者,如果存在任何忽略:

=IFERROR(INDEX($A$2:$A$64,MATCH(1,(COUNTIFS($A$2:$A$64,$A$2:$A$64,$B$2:$B$64,"a")+COUNTIFS($A$2:$A$64,$A$2:$A$64,$B$2:$B$64,"b")+COUNTIFS($A$2:$A$64,$A$2:$A$64,$B$2:$B$64,"c")=0)*(COUNTIF($E$1:E1,$A$2:$A$64)=0),0)),"") 

放入E2,按Ctrl-Shift鍵輸入,而不是Enter鍵確認數組公式。如果做得正確,Excel將在公式周圍放置{}

enter image description here

相關問題