比较两个阵列-水平与垂直

时间:2019-04-30 09:34:58

标签: excel excel-formula

情况如何

我正在尝试比较两个数组。为了简单起见,我们假设我们想知道一个数组的值在另一个数组中存在的频率。

我引用/查找的数组数据位于A1:A3

Apple
Lemon
Pear

我的搜索数组不在工作表中,而是写为{"Apple","Pear"}

问题

因此,要知道我们的搜索值在lookuparray中存在的频率,我们可以应用以下公式:

{=SUMPRODUCT(--(range1=range2))}

但是,{=SUMPRODUCT(--({"Apple","Pear"}=A1:A3))}会产生错误。换句话说,查找数组未按预期工作。

首先使用TRANSPOSE()使用{=SUMPRODUCT(--({"Apple","Pear"}=TRANSPOSE(A1:A3)))}函数根据我的数据创建水平阵列的结果是正确的答案为2!

好像我的类型化数组被自动处理为水平数组,而且我的数据显然是原始的。

为了检验我的假设,我尝试了另一个公式:

{=SUMPRODUCT(--({"Apple","Pear"}={"Apple","Lemon","Pear"}))}

两个类型的数组,因此使用上述逻辑,它们都将是水平数组,完全可以在不使用TRANSPOSE()的情况下工作,但是这将返回错误! #N/A

再次{=SUMPRODUCT(--({"Apple","Pear"}=TRANSPOSE({"Apple","Lemon","Pear"})))}给出了正确答案2。

问题

有人可以向我解释吗?

  • 不能将水平与垂直数组进行比较的原因。
  • 为什么类型化数组会被自动处理为水平
  • 为什么在我的假设检验中,第二种类型的数组被视为垂直数组。

我真的很好奇,很高兴能够链接到适当的文档,因为到目前为止我还没有找到任何文档。

这可能是一个容易回答的问题,尽管我似乎无法理解逻辑。

1 个答案:

答案 0 :(得分:1)

  

有人可以向我解释吗?

     
      
  • 不能将水平与垂直数组进行比较的原因。
  •   

这实际上是可行的,您还可以将水平数组与其他水平数组进行比较。

出现错误的原因是由于数组长度不匹配。考虑以下数组:

enter image description here

执行=SUMPRODUCT(--(B3:D3=F3:G3))=SUMPRODUCT(--({"Apple","Lemon","Pear"}={"Apple","Pear"}))相同(在excel的英语版本中,我不确定100%确定其他版本的分隔符),结果为=SUMPRODUCT(--(Apple=Apple, Lemon=Pear, Pear=???)),即将第一个数组的第n个元素与第二个数组的第n个元素进行比较,如果没有匹配项,则第一个数组中的第三个元素是Pear,但第二个数组中没有第三个元素,则得到N/A

当您比较两个数组(一个垂直和一个水平)时,excel实际上会“扩展”最终数组。考虑以下内容(1行x 3col和2行x 1col):

enter image description here

执行=SUMPRODUCT(--(B3:D3=F3:F4))=SUMPRODUCT(--({"Apple","Lemon","Pear"}={"Apple";"Pear"}))相同,结果为=SUMPRODUCT(--(Apple=Apple, Lemon=Apple, Pear=Apple; Apple=Pear, Lemon=Pear, Pear=Pear))。基本上感觉就像Excel扩展了这样的两个数组(3col x 2row):

enter image description here

这种“扩展”仅在一个数组高度为1行而另一个数组宽度为1列时发生,因此,如果您选择的数组具有不同之处,则excel将返回尝试将元素与“ nothing”进行比较以提供N / A(您可以使用“公式”标签下的“评估公式”功能提供帮助)

enter image description here

因此,本质上excel会得到一些类似于此的东西,其中第一个数组乘以第二个数组,得到结果数组:

enter image description here

但是由于最后一行和最后一列都包含空格,所以您在那里不适用。

  
      
  • 为什么类型化数组会被自动处理为水平
  •   

在您的问题中,似乎,分隔行,因此使用=SUMPRODUCT(--({"Apple","Pear"}=A1:A3))时,您观察到的效果类似于第一个示例中两行的比较,而使用=SUMPRODUCT(--({"Apple","Pear"}=TRANSPOSE(A1:A3)))时,您正在发生“扩展”。

如评论中所述,在excel的英语版本中,,分隔列,;分隔行,在这个简单的示例中可以看到,在该示例中,我提供了一个包含2行3的数组栏,excel显示{0,0,0;0,0,0}

enter image description here

  
      
  • 为什么在我的假设检验中,第二种类型的数组被视为垂直数组。
  •   

TRANSPOSE只需将数组从垂直切换为水平(反之亦然),但是根据您要执行的操作,根据我回答的第一部分,您会得到不同的结果,因此,当excel无法将一个数组的项与另一个数组的另一个项匹配时,它们将具有N/A,或者两个数组的“扩展”会导致更大的数组。