我为此疯狂。看起来很简单,但我无法弄清楚这一点。我有两个工作表。第一个工作表是我的数据。第二个就像一个答案键。在检查检查时,表1中的A1:B1与表2中第52行中的条件匹配,因此,列C中的值是“MGC”。执行此功能的公式是什么?没有数据就很难解释,所以我粘贴了样本电子表格的链接。非常感谢你。
此处的示例电子表格。 https://docs.google.com/spreadsheets/d/1_AjuNfCdGfEM-XkqPa6W4hSIxQg4NM2Vg4c2C1pQ_vQ/edit?usp=sharing
答案 0 :(得分:1)
在Sheet2中,在A列前面插入一列,并将公式放在A2 =C2&D2
中。
然后在Sheet1,Cell C2中使用公式=vlookup(A2&B2,Sheet2!A:B,2,0)
。
第一个使用连锁键进行查找,然后第二个查找该键。
答案 1 :(得分:0)
index(match())
怎么样?如果我已正确理解您需要匹配第一张中的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))
基本上这样做是使用连接,&
运算符来指定您正在寻找"标准A" &安培; "标准B"在表1中,它生成字符串" Criteria A Criteria B",它在匹配函数的第一部分中提供。
然后在第二个中,它表示将这与我在表2中的所有变量相匹配,方法与concantenation相同。
匹配函数的最后一部分(0)指定您想要一个' exact'匹配
然后它提供了这个作为索引函数的引用,然后索引函数找到与你想要的值相交的行,并返回它。
如前所述https://support.microsoft.com/en-us/kb/59482这是一个数组公式,因此它的行为不同,必须以不同的方式输入。 https://support.office.com/en-za/article/Guidelines-and-examples-of-array-formulas-7d94a64e-3ff3-4686-9372-ecfd5caa57c7
答案 2 :(得分:0)
如果没有VBA,有(至少)两种方法可以做到这一点。
使用已填写的列表
第一个依赖于您的数据可以重新排序的假设,因此“未报告”的所有内容都位于顶部,“报告”的所有内容都在此之下(反之亦然)。假设是这种情况(并且它似乎已经按照这样排序),我们将使用OFFSET函数创建一个新范围,该范围仅显示与“未报告”或“报告”对齐的值。
偏移量对纸张上的某个点进行给定引用,然后向下/向上移动&向左/向右看看你想要返回什么参考。然后,它返回给定高度和给定宽度的单元格范围。在这里,我们希望从左上角的Sheet2开始,向下移动,直到我们找到“未报告”或“报告”这一术语。一旦找到该术语,我们将要向右移动一列(从表2中拉出列B),然后具有与“未报告”或“报告”单元格一样多的行的“高度”。这将在第1页的A1中看起来如下,向下复制:
=OFFSET(Sheet2!$A$1,MATCH(A1,Sheet2!A:A,0)-1,1,COUNTIF(Sheet2!A:A,A1),1)
这说:首先,从sheet2上的单元格A1开始。然后在A1中找到该术语(在sheet2上“未报告”或“报告”!A:A(我们减去1因为OFFSET从A1开始 - 所以如果你的数据从A1开始,我们需要实际保持在“0”。如果你在sheet2上有标题,你不需要这个-1)。然后,向右移动1列。向下移动行的次数与Sheet2列A一样,在Sheet1 A1中找到术语。保持1列宽。 ,这将在sheet2上留下一个范围,显示列A的整个长度,列A与sheet1 A1中的术语匹配。
现在我们需要使用OFFSET,并使用它来找出Sheet1 B1中的术语何时匹配Sheet2列B.这将按如下方式工作:
=MATCH(B1,[FORMULA ABOVE],0)
这显示了从上面创建的特殊OFFSET数组开始的向下行数,B1中的术语与sheet2中的B列匹配。要使用此信息从工作表2上的C列中提取结果,我们可以使用INDEX函数,如下所示:
=INDEX([FORMULA ABOVE],MATCH(B1,[FORMULA ABOVE],0))
因为这在单个单元格中相当复杂,我们可以通过使用VLOOKUP来简化它,这只需要输入OFFSET函数一次。这将如下工作:
=VLOOKUP(B1,[FORMULA ABOVE],2,0)
这采用上面的OFFSET公式,在B1中找到匹配的术语,并移动到第二列以从sheet2中的列C获取值。因为我们将使用VLOOKUP,所以需要调整上面的偏移公式以提供2列数据而不是1.一起,这将看起来如下:
SHEET1,C1& 1的最终公式COPIED DOWN
=VLOOKUP(B1,OFFSET(Sheet2!$A$1,MATCH(A1,Sheet2!A:A,0)-1,1,COUNTIF(Sheet2!A:A,A1),2),2,0)
使用阵列公式的选项
只有对数据进行排序以便将REPORTED和UNREPORTED行组合在一起时,上述方法才有效。如果它们无法排序,您可以使用ARRAY FORMULA,它基本上采用一个通常适用于单个单元格的公式,并在整个单元格范围内运行它。它返回一个结果数组,必须将其减少到单个值。一个基本的数组公式看起来像这样[假设这个例子A1 = 1,A2 = 2 ... A5 = 5]:
=IF(A1:A5>3,A1:A5,"")
按CTRL + SHIFT + ENTER确认此(以及所有数组函数),而不仅仅是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。对于那些,它从该匹配中拉出行号。其他一切都返回“”。假设没有重复项,则只返回1个行号。要从结果数组中提取该数字,请将整个事物包装在MATCH函数中。现在您已经拥有行号,您可以使用INDEX函数将C中的结果拉到该行,如下所示:
最终阵列公式方法
=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,因为数组公式在大范围内运行非常缓慢。
答案 3 :(得分:0)
以下公式应该可以在不对数据表进行任何更改的情况下工作。
=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
可以在Microsoft Support上找到有关如何针对多个条件使用INDEX
和MATCH
的文档。
答案 4 :(得分:0)
目前尚不清楚你想对没有相应匹配的倍数做什么。在Sheet1中,txed被列为Unreported两次; kntyctap列为未报告三次。 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 function的错误。 Excel 2003和之前的版本可能必须使用IF(ISERROR(..., ...))
组合。