在Excel中比较两个数组

时间:2018-07-23 09:54:27

标签: arrays excel excel-formula

我有两个类似的数组,一个用于跟踪雇员的资格,一个用于跟踪工作所需的资格。我希望将两者进行比较,如果员工有资格胜任,则返回TRUE。这是我的数组的外观:

Employee | Qualification1 | Qualification2 | Qualification3 
Dave     | 1              | 0              | 1
Bob      | 0              | 1              | 1

Job      | Qualification1 | Qualification2 | Qualification3 
Job1     | 0              | 1              | 1
Job2     | 1              | 0              | 1

问题在于,随着添加新作业等,数组中的数据和数组的大小可能会发生变化。两个数组均使用= OFFSET公式定义,因此它们会随数据的大小而变化。我所缺少的是一种将特定作业的每个值与另一个数组中一行中的每个值进行比较的一种方法。这仅需要输出到一个单元中,告诉我每个员工是否合格(我计划在以后的另一个公式中使用此信息)。另外请记住,只要员工也具备完成这项工作所需的资格,那么该员工是否具有胜任的资格都没关系。

如果有人有任何想法,请告诉我,我已经看了3天了

谢谢

2 个答案:

答案 0 :(得分:1)

最简单的比较方法是使用=Concatenate()公式并比较输出字符串。

如果字符串相同,则数组相等。


关于资格,一种可能的解决方案是通过一些二进制数学。从十进制到二进制的Excel公式非常简单-=DEC2BIN(11)

  • 分配这样的值1,2,4,8,16(2 ^ n);
  • 对值求和。例如。 1 + 2 + 8位具有第一,第二和第四位置资格的用户;
  • 将总和保存为二进制;
  • 然后,如果要检查用户是否具有资格,请检查二进制代码并进行比较。例如。 101111。它表明,用户具有资格1 + 2 + 8。并且缺乏资格4,因此有0;

答案 1 :(得分:0)

假设您的样本数据从A1开始。如果A1 =员工,A5 =工作,则可以尝试:

G1 = Job1
H1 = Job2
F2 = Dave
F3 = Bob

G2  

 =IF((IF(INDEX($B$5:$B$7,MATCH(G$1,$A$5:$A$7,0))=0,1,IF(INDEX($B$1:$B$3,MATCH($F2,$A$1:$A$3,0))*INDEX($B$5:$B$7,MATCH(G$1,$A$5:$A$7,0))=1,1,0))*IF(INDEX($C$5:$C$7,MATCH(G$1,$A$5:$A$7,0))=0,1,IF(INDEX($C$1:$C$3,MATCH($F2,$A$1:$A$3,0))*INDEX($C$5:$C$7,MATCH(G$1,$A$5:$A$7,0))=1,1,0))*IF(INDEX($D$5:$D$7,MATCH(G$1,$A$5:$A$7,0))=0,1,IF(INDEX($D$1:$D$3,MATCH($F2,$A$1:$A$3,0))*INDEX($D$5:$D$7,MATCH(G$1,$A$5:$A$7,0))=1,1,0)))=1,"Qualified","No")

选择G2并拖动到H3。完成。

在索引/匹配中,源/参考范围始终是可调的。设置一次,然后拖动即可。

希望有帮助。 (: