MS Excel 中是否有可以执行以下操作的 2 Value Look up 函数?
Is there a 2 Value Look up function in MS Excel that can perform the following?
我快疯了。看起来很简单,但我无法弄清楚。我有两个工作表。第一个工作表是我的数据。第二个就像一个答案键。经核对,Sheet1中的A1:B1与SHEET2中第52行的条件匹配,因此C列的值为"MGC"。执行此功能的公式是什么?没有数据真的很难解释,所以我粘贴了示例电子表格的 link。非常感谢您。
此处为示例电子表格。 https://docs.google.com/spreadsheets/d/1_AjuNfCdGfEM-XkqPa6W4hSIxQg4NM2Vg4c2C1pQ_vQ/edit?usp=sharing
截图在这里。 (不会让我post我没有声誉)
index(match())
怎么样?如果我理解正确,您需要匹配 sheet 中的 A 和 B 列,检查 sheet 2 上 B 和 C 中的相关值以重新运行工作sheet 2 a 列工作sheet 1 c 列
第三版试试:
=INDEX(Sheet2!$C:$C0,MATCH(Sheet1!A1&Sheet1!B1,Sheet2!$B:$B0&Sheet2!$C:$C0,0))
基本上,它所做的是使用连接,即 &
运算符,指定您要在 sheet 1 中查找 "Criteria A" & "Criteria B",这使得字符串"Criteria A Criteria B",在匹配函数的第一部分提供。
在第二个中,它然后说以与连接相同的方式将它与 sheet 2 中的所有变量匹配。
匹配函数 (0) 的最后一部分指定您想要一个 'exact' 匹配
然后它提供这个作为对索引函数的引用,该函数然后找到与您想要的值相交的行,returns那个。
如此处所述https://support.microsoft.com/en-us/kb/59482 this is an array formula, so it behaves differently, and must be input differently. https://support.office.com/en-za/article/Guidelines-and-examples-of-array-formulas-7d94a64e-3ff3-4686-9372-ecfd5caa57c7
没有 VBA。
有(至少)两种方法可以做到这一点
使用排序列表
第一个依赖于假设你的数据可以是 re-sorted,所以所有 "Unreported" 都在顶部,所有 "reported" 都在下面(反之亦然) ).假设是这种情况(并且它似乎已经像这样排序),我们将使用函数 OFFSET 创建一个新范围,该范围仅显示与 "Unreported" 或 "Reported" 对齐的值.
Offset 对 sheet 上的一个点进行给定引用,然后移动 down/up & left/right 以查看您想要 return 的引用。然后,它 return 是给定高度和给定宽度的一系列单元格。在这里,我们要从左上角的 Sheet2 开始,向下移动直到找到术语 "Unreported" 或 "Reported"。一旦找到该术语,我们将要向右移动一列(从 sheet 2 中拉出 B 列),然后 'height' 的行数与 "unreported" 或 "reported" 个单元格。这将在 sheet 1 上的 A1 中如下所示,向下复制:
=OFFSET(Sheet2!$A,MATCH(A1,Sheet2!A:A,0)-1,1,COUNTIF(Sheet2!A:A,A1),1)
这表示:首先,从 sheet2 的单元格 A1 开始。然后找到 A1 中的项("unreported" 或 "reported",在 sheet2!A:A 上(我们减去 1,因为 OFFSET 从 A1 开始 - 所以如果您的数据从 A1 开始,我们需要实际上停留在“0”。如果你在 sheet2 上有 headers,你将不需要这个 -1)。然后,向右移动 1 列。向下移动行多次因为 Sheet2 A 列具有在 Sheet1 A1 中找到的术语。保持 1 列宽。一起,这将使您在 sheet2 上有一个范围,显示 B 列的整个长度,A 列与您在 sheet1 A1.
现在我们需要获取那个 OFFSET,并使用它来找出 Sheet1 B1 中的术语何时与 Sheet2 B 列匹配。这将按如下方式工作:
=MATCH(B1,[FORMULA ABOVE],0)
这显示了向下的行数,从上面创建的特殊 OFFSET 数组开始,来自 B1 的术语在来自 sheet2 的 B 列中匹配。要使用此信息从 sheet 2 上的 C 列中提取结果,我们可以使用 INDEX 函数,如下所示:
=INDEX([FORMULA ABOVE],MATCH(B1,[FORMULA ABOVE],0))
因为这在单个单元格中会相当复杂,我们可以通过使用 VLOOKUP 来简化它,它只需要输入一次 OFFSET 函数。这将按如下方式工作:
=VLOOKUP(B1,[FORMULA ABOVE],2,0)
这采用上面的 OFFSET 公式,在 B1 中找到匹配项,然后移动到第 2 列以从 sheet2 中的 C 列中获取值。因为我们要使用 VLOOKUP,所以需要调整上面的偏移量公式以提供 2 列数据而不是 1 列。总之,这将如下所示:
SHEET1、C1 和复制的最终公式
=VLOOKUP(B1,OFFSET(Sheet2!$A,MATCH(A1,Sheet2!A:A,0)-1,1,COUNTIF(Sheet2!A:A,A1),2),2,0)
使用数组公式的选项
上述方法只有在您的数据经过排序以便将 REPORTED 和 UNREPORTED 行组合在一起时才有效。如果无法对它们进行排序,您可以使用 ARRAY FORMULA,它本质上采用通常适用于单个单元格的公式,并且 运行 将其应用于整个单元格范围。它 return 是一个结果数组,必须将其缩减为单个值。一个基本的数组公式如下所示 [假设此示例 A1 = 1, A2 = 2...A5 = 5]:
=IF(A1:A5>3,A1:A5,"")
通过按 CTRL + SHIFT + ENTER 确认这一点(和所有数组函数),而不仅仅是 ENTER。这会查看 A1:A5 中的每个单元格,如果值大于 3,它会给出该单元格中的数字 - 否则,它会 returns ""。在这种情况下,结果将是数组 {"";"";"";4;5}。要获得总计 9,请将其包装在 SUM 函数中:
=SUM(IF(A1:A5>3,A1:A5,""))
对于您的情况,我们需要使用数组公式来查看 Sheet2 中的哪一行与 Sheet1 中的 A1 和 Sheet1 中的 B1 匹配。这看起来像这样:
=IF(Sheet2!$A:A0=A1,IF(Sheet2!$B:$B0,ROW($B:$B0),""),"")
这会检查 sheet 2 中 A 列中的哪些行与 A1 匹配。对于那些这样做的人,它会检查 sheet 2 中 B 列中的哪些行与 B1 匹配。对于那些,它从该匹配项中提取行号。其他一切 returns ""。假设没有重复项,应该只有 1 个行号得到 returned。要从结果数组中提取该数字,请将整个内容包装在 MATCH 函数中。现在您有了行号,您可以使用 INDEX 函数将该行的结果拉入 C 列,如下所示:
最终数组公式方法
=INDEX($C:$C0,MAX(IF(Sheet2!$A:A0=A1,IF(Sheet2!$B:$B0,ROW(Sheet2!$B:$B0),""),"")))
请记住在键入此公式时使用 CTRL + SHIFT + ENTER 进行确认,而不仅仅是 ENTER。请注意,我没有引用所有 Sheet2!A:A,因为数组公式 运行 在大范围内非常缓慢。
在Sheet2中,在A列前插入一列,将公式放在A2中=C2&D2
。
然后在 Sheet1 的单元格 C2 中使用公式 =vlookup(A2&B2,Sheet2!A:B,2,0)
.
第一个创建连接键进行查找,然后第二个查找该键。
无需对数据表进行任何更改即可使用以下公式。
=INDEX(Sheet2!$A:$A0,MATCH(Sheet1!A1,IF(Sheet2!$C:$C0=Sheet1!B1,Sheet2!$B:$B0),0))
记得用CTRL+SHIFT+ENTER
将这个公式保存为数组
有关如何针对多个条件使用 INDEX
和 MATCH
的文档,请参见 Microsoft Support。
不清楚你想对没有对应匹配项的倍数做什么。 txed在Sheet1中两次被列为Unreported; kntyctap 被列为 Unreported 3 次。这些在 Sheet2 上只有一个对应的匹配项。
多个条件匹配的非数组标准公式
对于 Excel 2010 及更高版本,请在 Sheet1!C1 中使用此标准公式:
=IFERROR(INDEX(Sheet2!$A:$A9,AGGREGATE(15,6,ROW(1:999)/((Sheet2!$B:$B9=A2)*(Sheet2!$C:$C9=B1)), COUNTIFS(A:A1, A1, B:B1, B1))), "")
对于 2010 之前的 Excel 版本,请在 Sheet1!C1 中使用此标准公式:
=IFERROR(INDEX(Sheet2!$A:$A9, SMALL(INDEX(ROW(:9)+((Sheet2!$B:$B9<>A1)+(Sheet2!$C:$C9<>B1))*1E+99, , ), COUNTIFS(A:A1, A1, B:B1, B1))), "")
我已经处理了后一个公式中 IFERROR function 的错误。 Excel 2003 及之前版本可能必须使用 IF(ISERROR(..., ...))
组合。
我快疯了。看起来很简单,但我无法弄清楚。我有两个工作表。第一个工作表是我的数据。第二个就像一个答案键。经核对,Sheet1中的A1:B1与SHEET2中第52行的条件匹配,因此C列的值为"MGC"。执行此功能的公式是什么?没有数据真的很难解释,所以我粘贴了示例电子表格的 link。非常感谢您。
此处为示例电子表格。 https://docs.google.com/spreadsheets/d/1_AjuNfCdGfEM-XkqPa6W4hSIxQg4NM2Vg4c2C1pQ_vQ/edit?usp=sharing
截图在这里。 (不会让我post我没有声誉)
index(match())
怎么样?如果我理解正确,您需要匹配 sheet 中的 A 和 B 列,检查 sheet 2 上 B 和 C 中的相关值以重新运行工作sheet 2 a 列工作sheet 1 c 列
第三版试试:
=INDEX(Sheet2!$C:$C0,MATCH(Sheet1!A1&Sheet1!B1,Sheet2!$B:$B0&Sheet2!$C:$C0,0))
基本上,它所做的是使用连接,即 &
运算符,指定您要在 sheet 1 中查找 "Criteria A" & "Criteria B",这使得字符串"Criteria A Criteria B",在匹配函数的第一部分提供。
在第二个中,它然后说以与连接相同的方式将它与 sheet 2 中的所有变量匹配。
匹配函数 (0) 的最后一部分指定您想要一个 'exact' 匹配
然后它提供这个作为对索引函数的引用,该函数然后找到与您想要的值相交的行,returns那个。
如此处所述https://support.microsoft.com/en-us/kb/59482 this is an array formula, so it behaves differently, and must be input differently. https://support.office.com/en-za/article/Guidelines-and-examples-of-array-formulas-7d94a64e-3ff3-4686-9372-ecfd5caa57c7
没有 VBA。
有(至少)两种方法可以做到这一点使用排序列表
第一个依赖于假设你的数据可以是 re-sorted,所以所有 "Unreported" 都在顶部,所有 "reported" 都在下面(反之亦然) ).假设是这种情况(并且它似乎已经像这样排序),我们将使用函数 OFFSET 创建一个新范围,该范围仅显示与 "Unreported" 或 "Reported" 对齐的值.
Offset 对 sheet 上的一个点进行给定引用,然后移动 down/up & left/right 以查看您想要 return 的引用。然后,它 return 是给定高度和给定宽度的一系列单元格。在这里,我们要从左上角的 Sheet2 开始,向下移动直到找到术语 "Unreported" 或 "Reported"。一旦找到该术语,我们将要向右移动一列(从 sheet 2 中拉出 B 列),然后 'height' 的行数与 "unreported" 或 "reported" 个单元格。这将在 sheet 1 上的 A1 中如下所示,向下复制:
=OFFSET(Sheet2!$A,MATCH(A1,Sheet2!A:A,0)-1,1,COUNTIF(Sheet2!A:A,A1),1)
这表示:首先,从 sheet2 的单元格 A1 开始。然后找到 A1 中的项("unreported" 或 "reported",在 sheet2!A:A 上(我们减去 1,因为 OFFSET 从 A1 开始 - 所以如果您的数据从 A1 开始,我们需要实际上停留在“0”。如果你在 sheet2 上有 headers,你将不需要这个 -1)。然后,向右移动 1 列。向下移动行多次因为 Sheet2 A 列具有在 Sheet1 A1 中找到的术语。保持 1 列宽。一起,这将使您在 sheet2 上有一个范围,显示 B 列的整个长度,A 列与您在 sheet1 A1.
现在我们需要获取那个 OFFSET,并使用它来找出 Sheet1 B1 中的术语何时与 Sheet2 B 列匹配。这将按如下方式工作:
=MATCH(B1,[FORMULA ABOVE],0)
这显示了向下的行数,从上面创建的特殊 OFFSET 数组开始,来自 B1 的术语在来自 sheet2 的 B 列中匹配。要使用此信息从 sheet 2 上的 C 列中提取结果,我们可以使用 INDEX 函数,如下所示:
=INDEX([FORMULA ABOVE],MATCH(B1,[FORMULA ABOVE],0))
因为这在单个单元格中会相当复杂,我们可以通过使用 VLOOKUP 来简化它,它只需要输入一次 OFFSET 函数。这将按如下方式工作:
=VLOOKUP(B1,[FORMULA ABOVE],2,0)
这采用上面的 OFFSET 公式,在 B1 中找到匹配项,然后移动到第 2 列以从 sheet2 中的 C 列中获取值。因为我们要使用 VLOOKUP,所以需要调整上面的偏移量公式以提供 2 列数据而不是 1 列。总之,这将如下所示:
SHEET1、C1 和复制的最终公式
=VLOOKUP(B1,OFFSET(Sheet2!$A,MATCH(A1,Sheet2!A:A,0)-1,1,COUNTIF(Sheet2!A:A,A1),2),2,0)
使用数组公式的选项
上述方法只有在您的数据经过排序以便将 REPORTED 和 UNREPORTED 行组合在一起时才有效。如果无法对它们进行排序,您可以使用 ARRAY FORMULA,它本质上采用通常适用于单个单元格的公式,并且 运行 将其应用于整个单元格范围。它 return 是一个结果数组,必须将其缩减为单个值。一个基本的数组公式如下所示 [假设此示例 A1 = 1, A2 = 2...A5 = 5]:
=IF(A1:A5>3,A1:A5,"")
通过按 CTRL + SHIFT + ENTER 确认这一点(和所有数组函数),而不仅仅是 ENTER。这会查看 A1:A5 中的每个单元格,如果值大于 3,它会给出该单元格中的数字 - 否则,它会 returns ""。在这种情况下,结果将是数组 {"";"";"";4;5}。要获得总计 9,请将其包装在 SUM 函数中:
=SUM(IF(A1:A5>3,A1:A5,""))
对于您的情况,我们需要使用数组公式来查看 Sheet2 中的哪一行与 Sheet1 中的 A1 和 Sheet1 中的 B1 匹配。这看起来像这样:
=IF(Sheet2!$A:A0=A1,IF(Sheet2!$B:$B0,ROW($B:$B0),""),"")
这会检查 sheet 2 中 A 列中的哪些行与 A1 匹配。对于那些这样做的人,它会检查 sheet 2 中 B 列中的哪些行与 B1 匹配。对于那些,它从该匹配项中提取行号。其他一切 returns ""。假设没有重复项,应该只有 1 个行号得到 returned。要从结果数组中提取该数字,请将整个内容包装在 MATCH 函数中。现在您有了行号,您可以使用 INDEX 函数将该行的结果拉入 C 列,如下所示:
最终数组公式方法
=INDEX($C:$C0,MAX(IF(Sheet2!$A:A0=A1,IF(Sheet2!$B:$B0,ROW(Sheet2!$B:$B0),""),"")))
请记住在键入此公式时使用 CTRL + SHIFT + ENTER 进行确认,而不仅仅是 ENTER。请注意,我没有引用所有 Sheet2!A:A,因为数组公式 运行 在大范围内非常缓慢。
在Sheet2中,在A列前插入一列,将公式放在A2中=C2&D2
。
然后在 Sheet1 的单元格 C2 中使用公式 =vlookup(A2&B2,Sheet2!A:B,2,0)
.
第一个创建连接键进行查找,然后第二个查找该键。
无需对数据表进行任何更改即可使用以下公式。
=INDEX(Sheet2!$A:$A0,MATCH(Sheet1!A1,IF(Sheet2!$C:$C0=Sheet1!B1,Sheet2!$B:$B0),0))
记得用CTRL+SHIFT+ENTER
有关如何针对多个条件使用 INDEX
和 MATCH
的文档,请参见 Microsoft Support。
不清楚你想对没有对应匹配项的倍数做什么。 txed在Sheet1中两次被列为Unreported; kntyctap 被列为 Unreported 3 次。这些在 Sheet2 上只有一个对应的匹配项。
多个条件匹配的非数组标准公式
对于 Excel 2010 及更高版本,请在 Sheet1!C1 中使用此标准公式:
=IFERROR(INDEX(Sheet2!$A:$A9,AGGREGATE(15,6,ROW(1:999)/((Sheet2!$B:$B9=A2)*(Sheet2!$C:$C9=B1)), COUNTIFS(A:A1, A1, B:B1, B1))), "")
对于 2010 之前的 Excel 版本,请在 Sheet1!C1 中使用此标准公式:
=IFERROR(INDEX(Sheet2!$A:$A9, SMALL(INDEX(ROW(:9)+((Sheet2!$B:$B9<>A1)+(Sheet2!$C:$C9<>B1))*1E+99, , ), COUNTIFS(A:A1, A1, B:B1, B1))), "")
我已经处理了后一个公式中 IFERROR function 的错误。 Excel 2003 及之前版本可能必须使用 IF(ISERROR(..., ...))
组合。