如何在EXCEL中使用MATCH进行多行处理?
我想在EXCEL中使用类似MATCH的函数,只是我想在包含多行和多列的表中查找一个值。 该函数应该返回find的值的列。
这是一张更好理解的图片:
在单元格K6中,值是“鸡”。 我想在A1:G9的表格中查找“鸡”。 然后,我想将单元格M6中的值设置为“蛋白质来源”,因为这是表A1:G9中“鸡”的相关值。 目前,在M6中有一个逻辑值“TRUE”,因为我用COUNTIF来查看“Chicken”是否在A1:G9中。 但是我不知道如何将“蛋白质来源”的价值转化为M6。
MATCH至less会find列/行号,如果我不必查找多行/列。 但MATCH不接受多行/列。
=INDEX($A$1:$G$1,SUMPRODUCT(COLUMN($A$2:$G$9)*($A$2:$G$9=K3)))
放在M3旁边的鸡,你应该能够把它复制下来。
所以道歉,但我不能按照你的问题标题做你想要的MATCH。 但是我可以返回find你的物品的列号。对这个等式的一个主要的警告是,无论你在A2:G9范围内寻找什么,只能出现一次! 如果不止一次出现,即使没有错误,公式可能会炸毁或返回错误的列。
通常索引和匹配工作真的很好。 你试图基本上做到:
=Index (header row, MATCH(Item I am looking for, Table of stuff))
所以我所做的就是用SUMPRODUCTreplace这个想法的Match部分:
SUMPRODUCT(COLUMN($A$2:$G$9)*($A$2:$G$9=K3))
基本上会发生什么是COLUMN将返回我们正在查看的一个计算实例的列号,然后给我们的下一个列号,我们的方式通过计算。 无论列号是多less,都乘以逻辑语句,如果为false,则为0,如果为true,则为1。 所以没有我们正在寻找的任何列号等于0,只有我们正在寻找的列号返回,因为它乘以1。
误区是,如果你有不止一次的鸡,你会得到不止一次的列数,它们将被加在一起,这意味着你的豆浆在第二列中有两次返回值6 + 6 = 12。问题是我们没有12列,所以我们得到一个错误。 此外,如果你有两次香蕉,你会有1 + 1 = 2,你会在蔬菜的第二列返回标题。
如果你想实现一些潜在的错误检查,你可以在方程中使用一些IFERROR和ERROR.TYPE。 它不会在列号中捕获重复项。 你会得到如下结果:
=IFERROR(INDEX($A$1:$G$1,SUMPRODUCT(COLUMN($A$2:$G$8)*($A$2:$G$8=K3))),IF(ERROR.TYPE(INDEX($A$1:$G$1,SUMPRODUCT(COLUMN($A$2:$G$8)*($A$2:$G$8=K3))))=3,"NOT FOUND","MULTIPLE ENTRIES"))
然后结果看起来像这样:
边注
在一个侧面说明,如果你的表不在列A,你需要从列方程中减去一些数字,使第一列减去幻数会导致1 …或者你可以做到这一点,使其更多充满活力(这是技术术语是对的?):
SUMPRODUCT((COLUMN($A$2:$G$9)-COLUMN($A$2)+1)*($A$2:$G$9=K3))
从一系列MATCH函数中接收列号的INDEX / MATCH函数对可以适用于标准的基于公式的解决scheme,只要行数有限。 如果没有find,那么每一行都会被IFERROR函数传递给下一个MATCH语句。
以M6为标准配方,
=INDEX(A$2:G$2, IFERROR(MATCH(K6, A$3:G$3, 0), IFERROR(MATCH(K6, A$4:G$4, 0), IFERROR(MATCH(K6, A$5:G$5, 0), IFERROR(MATCH(K6, A$6:G$6, 0), IFERROR(MATCH(K6, A$7:G$7, 0), IFERROR(MATCH(K6, A$8:G$8, 0), IFERROR(MATCH(K6, A$9:G$9, 0), MATCH(K6, A$10:G$10, 0)))))))))
这种方法似乎适用于您的样本数据,但是随着食物数据行数的扩展,这种方法显然有局限性。 如果事实上,在某些时候可能适合覆盖A:G列而不是3:9行。
最好的方法之一就是使用Linq作为一种search方法。
是一个伟大的链接开始!
另一种方法是手动循环行和单元格,这是一个缓慢的讨厌的过程,并比较值。
我知道你可能想直接回答你的问题,但我认为你可以通过使用LINQ来获得更多的好处,并且保持干净。
一个简单的谷歌search“使用Excel的LINQ”提供了许多方向。
示例链接:
在Excel 2007中使用LINQ https://msdn.microsoft.com/zh-cn/library/dd920313(v=office.12).aspx
videoLinq to Excel数据searchhttps://www.youtube.com/watch?v=_4aNwh7pRxo