我想在EXCEL中使用类似MATCH函数的东西,只是想在包含多个行和列的表中查找值。然后该函数应返回找到的值的列。
以下是更好理解的图片:
在单元格K6中,值为“Chicken”。我想在表格中查找“鸡”,范围从A1:G9。然后我想将单元格M6中的值设置为“蛋白质源”,因为这是表A1:G9中“鸡”的关联值。 目前,M6中的逻辑值为“TRUE”,因为我使用COUNTIF查看“鸡”是否在A1:G9中。但我不知道如何将“蛋白质来源”的值传递给M6。
如果我不需要查找多行/列,MATCH至少会找到列/行号。但MATCH不接受多行/列。
答案 0 :(得分:3)
temp = {'sum': sum(row), 'mean': np.mean(row)}
将它放在鸡旁边的M3中,你应该可以将它复制下来。
很抱歉,但根据你的问题标题,我无法用MATCH做你想做的事。但是我可以返回找到项目的列号。这个等式的一个主要警告是,无论你在A2:G9范围内寻找什么,都只能出现一次!如果它出现不止一次,即使没有错误,等式可能会爆炸或返回错误的列。
通常情况下索引和匹配工作非常好。你试图基本上做:
=INDEX($A$1:$G$1,SUMPRODUCT(COLUMN($A$2:$G$9)*($A$2:$G$9=K3)))
所以我所做的就是用SUMPRODUCT替换那个思想的匹配部分:
=Index (header row, MATCH(Item I am looking for, Table of stuff))
基本上会发生什么是COLUMN将返回我们正在查看的一个计算实例的列号,然后在我们计算的过程中给出下一个列号。无论该列号是什么,都要乘以逻辑语句,如果为false,则为0;如果为true,则为1。因此,任何没有我们要查找的列号等于0,只返回具有我们要查找的列号,因为它乘以1。
陷阱是如果你不止一次吃鸡肉,你会得到不止一次的列数,它们会被加在一起,这意味着你的豆浆在第6列中有两次返回值为6 + 6 = 12.问题是我们没有12列,所以我们得到一个错误。另外,如果你有香蕉两次,你会得到1 + 1 = 2,你会在蔬菜的第二列返回标题。
如果要实现一些潜在的错误检查,可以在等式中使用一些IFERROR和ERROR.TYPE。它不会捕获列号中的重复项。你会得到如下的东西:
SUMPRODUCT(COLUMN($A$2:$G$9)*($A$2:$G$9=K3))
然后结果看起来像这样:
SIDE NOTE
另一方面,如果您的表不在A列中,您需要从列方程中减去一些数字,这样第一列减去幻数就会产生1 ...或者你可以这样做让它更有活力(这是技术术语吧?):
=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"))
答案 1 :(得分:3)
从一系列INDEX接收其列号的MATCH / MATCH functions函数对可能适合于基于标准公式的解决方案,前提是行数有限。如果未找到,则将使用IFERROR function传递控件检查每一行到下一个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可能是有利的。
答案 2 :(得分:0)
解决此问题的最佳方法之一是使用Linq作为一种搜索方法。
是一个很好的开始链接!
另一种方法是手动循环遍历行和单元格,这是一个缓慢讨厌的过程并比较这些值。
我知道你可能想直接回答你的问题,但我认为你可以通过使用LINQ来做你想做的事情,并保持简单和干净,从而获益更多。
Google轻松搜索“使用LINQ for excel”可为您提供多个指示。
示例链接:
在Excel 2007中使用LINQ https://msdn.microsoft.com/en-us/library/dd920313(v=office.12).aspx
用于数据搜索的视频Linq到Excel https://www.youtube.com/watch?v=_4aNwh7pRxo