情况如何
我正在尝试比较两个数组。为了简单起见,我们假设我们想知道一个数组的值在另一个数组中存在的频率。
我引用/查找的数组数据位于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。
问题
有人可以向我解释吗?
我真的很好奇,很高兴能够链接到适当的文档,因为到目前为止我还没有找到任何文档。
这可能是一个容易回答的问题,尽管我似乎无法理解逻辑。
答案 0 :(得分:1)
有人可以向我解释吗?
- 不能将水平与垂直数组进行比较的原因。
这实际上是可行的,您还可以将水平数组与其他水平数组进行比较。
出现错误的原因是由于数组长度不匹配。考虑以下数组:
执行=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):
执行=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):
这种“扩展”仅在一个数组高度为1行而另一个数组宽度为1列时发生,因此,如果您选择的数组具有不同之处,则excel将返回尝试将元素与“ nothing”进行比较以提供N / A(您可以使用“公式”标签下的“评估公式”功能提供帮助)
因此,本质上excel会得到一些类似于此的东西,其中第一个数组乘以第二个数组,得到结果数组:
但是由于最后一行和最后一列都包含空格,所以您在那里不适用。
- 为什么类型化数组会被自动处理为水平
在您的问题中,似乎,
分隔行,因此使用=SUMPRODUCT(--({"Apple","Pear"}=A1:A3))
时,您观察到的效果类似于第一个示例中两行的比较,而使用=SUMPRODUCT(--({"Apple","Pear"}=TRANSPOSE(A1:A3)))
时,您正在发生“扩展”。
如评论中所述,在excel的英语版本中,,
分隔列,;
分隔行,在这个简单的示例中可以看到,在该示例中,我提供了一个包含2行3的数组栏,excel显示{0,0,0;0,0,0}
:
- 为什么在我的假设检验中,第二种类型的数组被视为垂直数组。
TRANSPOSE
只需将数组从垂直切换为水平(反之亦然),但是根据您要执行的操作,根据我回答的第一部分,您会得到不同的结果,因此,当excel无法将一个数组的项与另一个数组的另一个项匹配时,它们将具有N/A
,或者两个数组的“扩展”会导致更大的数组。