【发布时间】:2020-03-11 21:35:37
【问题描述】:
这是什么情况
我正在尝试比较两个数组。为简单起见,假设我们想知道一个数组的值在另一个数组中存在的频率。
我的引用/查找数组数据位于A1:A3
Apple
Lemon
Pear
我的搜索数组不在工作表中,而是写在{"Apple","Pear"}
问题
所以要知道我们的搜索值在查找数组中出现的频率,我们可以应用如下公式:
{=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。
问题
谁能给我解释一下:
- 水平数组无法与垂直数组进行比较的原因。
- 为什么类型化的数组会自动作为水平处理
- 为什么在我的假设测试中,第二个类型的数组被处理为垂直的。
我真的很好奇,也很乐意链接到适当的文档,因为到目前为止我还没有找到任何文档。
这可能是一个容易回答的问题,尽管我似乎无法理解其中的逻辑。
【问题讨论】:
-
只是说,这是一个垂直数组:
{"Apple";"Lemon";"Pear"}(注意分隔符的区别) -
谢谢@Jerry,我的系统分隔符是分号,因为我使用的是荷兰语应用程序。这会导致我的问题吗?另外,
{=SUMPRODUCT(--({"Apple","Pear"}={"Apple","Lemon","Pear"}))}不应该是相等的类型或数组吗?有没有想过为什么那行不通? -
我一直试图为此找到一个合适的术语,但我一直没能找到。我不确定您的问题是否是this recent answer of mine 的直接子序列,但我发现的最接近的问题似乎是Outer Product Matrix Multiplication。我个人必须通过反复试验和尝试来了解它是如何工作的,所以我无法真正完整详细地解释它是如何工作的,也不知道它为什么会这样工作。
-
关于分隔符,也许是的。在英文版中,逗号用来分隔列,分号用来分隔行,所以
{1,2;3,4;5,6}是一个3行2列的矩阵。也许荷兰语版本中的分隔符被切换了? -
是的,所以当我这样做时,我得到this 作为结果[通过按以下顺序比较获得结果:apple=apple,apple=lemon,apple=pear; pear=apple, pear=lemon, pear=pear], (最后变成 2,我认为从图片中应该很明显)。似乎管道
|分隔了列,虽然它看起来很奇怪,哈哈
标签: excel excel-formula