在MS Excel中是否有2值查找function可以执行以下操作?
我疯了。 这似乎很简单,但我不明白这一点。 我有两个工作表。 第一个工作表是我的数据。 其次就像一个答案的关键。 检查确认后,Sheet1中的A1:B1与SHEET2中第52行的条件相符,因此C栏的值为“MGC”。 什么是将执行此function的公式? 没有数据就很难解释,所以我粘贴了示例电子表格的链接。 非常感谢你提前。
样本电子表格在这里。 https://docs.google.com/spreadsheets/d/1_AjuNfCdGfEM-XkqPa6W4hSIxQg4NM2Vg4c2C1pQ_vQ/edit?usp=sharing
这里截图。 (不会让我发贴我没有声望)
如何index(match())
? 如果我理解正确,你需要在表1中的A和B两列上进行匹配,检查表2中的B和C中的相关值以将工作表2的列a重新放到工作表1的列c中。
第三个版本试试:
= INDEX(Sheet 2中$ C $ 1:!$ C $ 360 MATCH(Sheet 1中A1&Sheet 1中B1,Sheet2的$ B $ 1:!!$ B $ 360 Sheet 2中$ C $ 1:!$ C $ 360,0))
基本上这是使用连接( &
运算符)来指定您正在查找表1中的“标准A”和“标准B”,这使得string“Criteria A Criteria B”,它在第一部分匹配function。 然后在第二部分中,我们将其与第2页中的所有variables进行匹配,与concantenation相同。 匹配函数(0)的最后一部分指定你想要一个“精确”匹配
然后将它作为索引函数的参考提供,然后索引函数find与您想要的值相交的行,并返回该值。
正如这里所说的https://support.microsoft.com/en-us/kb/59482这是一个数组公式,所以它的行为不同,并且必须以不同的方式input。 https://support.office.com/en-za/article/Guidelines-and-examples-of-array-formulas-7d94a64e-3ff3-4686-9372-ecfd5caa57c7
在Sheet2中,在列A前面插入一列,并将公式放入A2 =C2&D2
。 然后在Sheet1中,Cell C2的公式=vlookup(A2&B2,Sheet2!A:B,2,0)
。
第一个使连接的键进行查找,然后第二个查找该键。
至less有2种方法可以在没有VBA的情况下执行此操作。
使用分类列表
第一个依赖于您的数据可以重新sorting的假设,以便“未报告”的所有内容都位于最前面,“报告”的所有内容都在此之下(反之亦然)。 假设情况如此(似乎已经这样sorting),我们将使用OFFSET函数创build一个新的范围,只显示与“未报告”或“报告”alignment的值。
偏移采用对纸张上某一点的给定引用,然后向下/向上和向左/向右移动以查看您要返回的引用。 然后,它返回给定高度和给定宽度的一系列单元格。 在这里,我们要从左上方的Sheet2开始,向下移动,直到find“Unreported”或“Reported”这个词。 一旦find这个术语,我们将要向右移动一列(从第2张拉列B),然后有“未报告”或“已报告”单元格的行数为“高度”。 在表1中的A1中将如下所示,复制下来:
=OFFSET(Sheet2!$A$1,MATCH(A1,Sheet2!A:A,0)-1,1,COUNTIF(Sheet2!A:A,A1),1)
这就是说:首先,从sheet2上的单元格A1开始。 然后findA1中的术语(在sheet2上是“unreported”或者“reported”)A:A(因为OFFSET从A1开始,所以减1,所以如果你的数据从A1开始,我们需要实际上停留在“0”。在sheet2上有标题,你将不需要这个-1),然后向右移动1列,向下移动多次,如Sheet2的A列在Sheet1 A1中find的那样,保留1列宽。 ,这将使您在工作表2上显示一个单独的范围,显示列A与在Sheet1 A1中匹配您的术语的整个长度的列B.
现在我们需要取这个OFFSET,并用它来找出Sheet1 B1中的术语何时匹配Sheet2的列B.这将如下工作:
=MATCH(B1,[FORMULA ABOVE],0)
这显示了从上面创build的特殊的OFFSET数组开始的向下的行数,B1的术语在来自sheet2的B列中匹配。 要使用这些信息从表2的C列中获取结果,我们可以使用INDEX函数,如下所示:
=INDEX([FORMULA ABOVE],MATCH(B1,[FORMULA ABOVE],0))
因为在单个单元格中这会相当复杂,所以我们可以通过使用VLOOKUP来简化这个操作,它只需要一次inputOFFSET函数。 这将工作如下:
=VLOOKUP(B1,[FORMULA ABOVE],2,0)
这取上面的OFFSET公式,在B1中find匹配项,并移到第二列以获取sheet2中列C的值。 因为我们要使用VLOOKUP,所以需要调整上面的偏移公式,以提供2列数据而不是1.总起来看,如下所示:
最终的公式1,C1和复制下来
=VLOOKUP(B1,OFFSET(Sheet2!$A$1,MATCH(A1,Sheet2!A:A,0)-1,1,COUNTIF(Sheet2!A:A,A1),2),2,0)
选项使用数组公式
上述方法仅适用于数据sorting的情况,以便REPORTED和UNREPORTED行分组在一起。 如果不能sorting,可以使用ARRAY FORMULA,它基本上采用一个正常应用于单个单元格的公式,并在整个单元格范围内运行。 它返回一个结果数组,它必须被减less到一个单一的值。 一个基本的数组公式看起来像这样[假设对于这个例子,A1 = 1,A2 = 2 … A5 = 5]:
=IF(A1:A5>3,A1:A5,"")
通过按CTRL + SHIFT + ENTER,而不是只是确认这个(和所有数组函数)。 这从A1:A5中查看每个单元格,如果值大于3,则会给出该单元格中的数字,否则返回“”。 在这种情况下,结果将是数组{“”;“”“”; 4; 5}。 为了得到9的总数,把它包装在SUM函数中:
=SUM(IF(A1:A5>3,A1:A5,""))
在你的情况下,我们将要使用数组公式来查看Sheet2中的哪一行与Sheet1匹配的A1,以及Sheet1中的B1。 这看起来像这样:
=IF(Sheet2!$A$1:A$100=A1,IF(Sheet2!$B$1:$B$100,ROW($B$1:$B$100),""),"")
这将检查第2页中A列中的哪些行与A1匹配。 对于那些做,它然后检查列2中的列B中的哪些行匹配B1。 对于这些,它从该匹配拉行号。 一切都返回“”。 假设没有重复,应该只有一个行号返回。 从结果数组中取出这个数字,把所有的东西包装在一个MATCH函数中。 现在您已经有了行号,您可以使用INDEX函数将列C中的结果与该行相拉,如下所示:
最终arrays公式
=INDEX($C$1:$C$100,MAX(IF(Sheet2!$A$1:A$100=A1,IF(Sheet2!$B$1:$B$100,ROW(Sheet2!$B$1:$B$100),""),"")))
请记住,当您键入此公式时,请使用CTRL + SHIFT + ENTER键而不是ENTER键进行确认。 请注意,我并没有提到Sheet2的全部内容!A:A,因为数组公式在大范围内运行非常缓慢。
下面的公式应该可以在不对数据表做任何改变的情况下工作。
=INDEX(Sheet2!$A$1:$A$360,MATCH(Sheet1!A1,IF(Sheet2!$C$1:$C$360=Sheet1!B1,Sheet2!$B$1:$B$360),0))
记住用CTRL+SHIFT+ENTER
将这个公式保存为一个数组
有关如何根据多个条件使用INDEX
和MATCH
文档可以在Microsoft支持上find。
目前还不清楚你想要做多less没有相应的匹配。 txed在Sheet1中被列为Unreported两次; kntyctap被列为Unreported三次。 Sheet2上只有一个相应的匹配。
用于多个标准匹配的非数组标准公式
对于Excel 2010及更高版本,在Sheet1中使用此标准公式C1:
=IFERROR(INDEX(Sheet2!$A$1:$A$999,AGGREGATE(15,6,ROW(1:999)/((Sheet2!$B$1:$B$999=A2)*(Sheet2!$C$1:$C$999=B1)), COUNTIFS(A$1:A1, A1, B$1:B1, B1))), "")
对于2010年以前的Excel版本,请在Sheet1中使用此标准公式C1:
=IFERROR(INDEX(Sheet2!$A$1:$A$999, SMALL(INDEX(ROW($1:$999)+((Sheet2!$B$1:$B$999<>A1)+(Sheet2!$C$1:$C$999<>B1))*1E+99, , ), COUNTIFS(A$1:A1, A1, B$1:B1, B1))), "")
我在后面的公式中用IFERROR函数处理了错误。 Excel 2003和以前可能必须使用IF(ISERROR(..., ...))
组合。