2017-05-05 39 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

相关问题