bckelley Asked: 2019-10-14 11:44:05 +0800 CST2019-10-14 11:44:05 +0800 CST 2019-10-14 11:44:05 +0800 CST VLOOKUP 多个值 772 我希望有人可以帮助解决这个问题,我正在尝试在表格中找到工资并返回基于申请状态的百分比。 microsoft-excel microsoft-office-2010 3 个回答 Voted Best Answer teylyn 2019-10-14T13:52:31+08:002019-10-14T13:52:31+08:00 这可以在没有 volatile 偏移量的情况下使用索引/匹配来完成。这里的挑战是您首先必须找到执行匹配的列。可以使用工资列上的索引和索引找到此列,使用完全匹配来查找第 2 行中的归档状态。请注意,行的第二个参数保持空白。然后索引将返回一个范围,而不是单个单元格。 INDEX($C$3:$D$12,,MATCH($H$3,$C$2:$D$2,0)) 在该范围内,您希望将工资与近似查找匹配,使用 1 作为最后一个参数,这需要对数据进行排序。 MATCH($H$2,INDEX($C$3:$D$12,,MATCH($H$3,$C$2:$D$2,0)),1) 这将返回找到的或近似匹配的行号。在税率的另一个索引中使用该行号。这是完整的公式 =INDEX($B$3:$B$12,MATCH($H$2,INDEX($C$3:$D$12,,MATCH($H$3,$C$2:$D$2,0)),1)) kcrk 2019-10-14T11:47:00+08:002019-10-14T11:47:00+08:00 使用 Excel 中的普通LOOKUP函数。对表格进行排序很重要。有了该值,您就可以执行 VLOOKUP,就像在您的公式中一样。 我会使用OFFSETandMATCH来根据状态移动查找范围。例如,您的公式可能如下所示: =LOOKUP(H1,OFFSET(C3:C9,0,MATCH(H2,C2:E2,0)-1),B3:B9) 您可以在此处找到更多信息:https ://exceljet.net/formula/lookup-value-between-two-numbers Jeorje 2021-09-11T19:59:03+08:002021-09-11T19:59:03+08:00 VLOOKUP()如果你不想离开,就没有必要离开。 您遇到的问题不是由于VLOOKUP()能够进行所需的查找。问题是您进行了错误的查找。 您的公式在 H2 中查找值,但在表 B2:E9 和 B11:E20 中查找。VLOOKUP()使用表中的第一列进行查找。好吧,您要查看的表中的第一列是 B 列,其中包含百分比。在这种情况下,百分比均 <1。因此,您在价值不大于 1 的列中寻找 540 美元……它必须达到最后一个值,找不到更高的值,并以找到的最高值为基础。然后它查看其他三列以获取适当的返回金额。 好吧,你不能指望它会起作用......在此期间收入超过 37 美分的任何人都会看到最后一行被选中。 你可以使用: =VLOOKUP(G2,INDEX(A1:D8,ROW(1:8),IFS(G3="Single",{2,1},G3="Married",{3,1},G3="HoH",{4,1},TRUE,"")),2,TRUE) 你有四个参数VLOOKUP()。第一个很简单,就是当期的收入金额,G2。最后一个也很简单,它是 TRUE 值,因此查找不会寻找精确匹配。 有趣的参数是第二个参数,即要使用的查找表。因为您将使用INDEX()选择要使用的列并重新排列它们,所以第三个参数也很简单,您使用的查找表的第二列是“2”。 一个两列查找表???有四列?不是两个?是什么赋予了? INDEX()让您给它一个范围,然后从中选择一或多行和一或多列。事实上,这INDEX/MATCH就是全部内容,尽管在这种情况下通常会寻找单个值。因此,您将使用INDEX()从四列中仅选择两列,第一列将是查找列(这是如何VLOOKUP()工作的),因此第二列将是结果列,即税率。 当您以这种方式选择列或行时,您必须使用另一个需要确定行(一个或全部,但直接指定)的表达式,因此您不能执行“将该值留空”或“使用零来获取所有行/列”技术。在这种情况下,您需要原始表中的所有行,其中 8 行,因此使用常用方法之一: ROW(1:8) SEQUENCE(8) (我相信 2019 年不可用) 那么剩下的唯一魔法就是如何指定列。如果你有一个简单的情况,你可以只输入一个array constantlike ,但是你需要三个可能的数组常量之一:{2,39,23,24,25,2,2,8,1,33} {2,1} 如果单 {3,1} 如果已婚 {4,1} 如果 HoH 这IFS()是任何简单的方法,因为很少。更多的?在某些时候,您更喜欢一个表和它自己的查找。必须经常更换吗?绝对更喜欢表格和公式中自己的查找。无论如何,这里很简单,所以我使用了一个IFS()非常简单的(但超过公式长度的一半!)。 尽管如此,最后一件事可能看起来很奇怪......为什么所有这些数组常量都以 1 结尾?好吧,那是因为原始表(您在问题中显示的表)具有您需要在 ITS 第 1 列中查找的值,并且您必须将它们放在第 2 列中以用于实际查找表,该表INDEX()正在动态创建。所以他们都有税率列排在第二位,所以VLOOKUP()会起作用。 INDEX()此方法旨在具有指导意义,因此您可以使用该重新排序技术获得更多里程。它也适用于其他事情: FILTER()作为一个大用途,但甚至VLOOKUP()可以像这样采用一个数组常量。在这种情况下,它可能用于结果列。通过在数组常量中指定多个而不是像此公式中的普通 2 那样指定一个,您可以一次性获得多个结果。想要查找一件事,一次,并从查找表的五个列中获取结果?使用数组常量而不是单个列号。不需要五个单独的查找。还有其他功能也可以使用它。 显然,“在当天”,INDEX/MATCH接受答案中的简单是最快、最简单的方法。现在有人认为XLOOKUP()会是,也许那时就可以了。无论是当时还是现在,人们都不会喜欢上面的公式。 我部分地以VLOOKUP()粉丝的身份回答(讨厌听到绝对错误的“它不会'向左看'”,例如:它在这个公式中这样做了三种方式!),但主要是为了展示一种可以做一些事情并强调它的一个重要方面INDEX()以及它在其他一些常用功能中可以很方便的事实。
这可以在没有 volatile 偏移量的情况下使用索引/匹配来完成。这里的挑战是您首先必须找到执行匹配的列。可以使用工资列上的索引和索引找到此列,使用完全匹配来查找第 2 行中的归档状态。请注意,行的第二个参数保持空白。然后索引将返回一个范围,而不是单个单元格。
在该范围内,您希望将工资与近似查找匹配,使用 1 作为最后一个参数,这需要对数据进行排序。
这将返回找到的或近似匹配的行号。在税率的另一个索引中使用该行号。这是完整的公式
使用 Excel 中的普通
LOOKUP
函数。对表格进行排序很重要。有了该值,您就可以执行 VLOOKUP,就像在您的公式中一样。我会使用
OFFSET
andMATCH
来根据状态移动查找范围。例如,您的公式可能如下所示:=LOOKUP(H1,OFFSET(C3:C9,0,MATCH(H2,C2:E2,0)-1),B3:B9)
您可以在此处找到更多信息:https ://exceljet.net/formula/lookup-value-between-two-numbers
VLOOKUP()
如果你不想离开,就没有必要离开。您遇到的问题不是由于
VLOOKUP()
能够进行所需的查找。问题是您进行了错误的查找。您的公式在 H2 中查找值,但在表 B2:E9 和 B11:E20 中查找。
VLOOKUP()
使用表中的第一列进行查找。好吧,您要查看的表中的第一列是 B 列,其中包含百分比。在这种情况下,百分比均 <1。因此,您在价值不大于 1 的列中寻找 540 美元……它必须达到最后一个值,找不到更高的值,并以找到的最高值为基础。然后它查看其他三列以获取适当的返回金额。好吧,你不能指望它会起作用......在此期间收入超过 37 美分的任何人都会看到最后一行被选中。
你可以使用:
你有四个参数
VLOOKUP()
。第一个很简单,就是当期的收入金额,G2。最后一个也很简单,它是 TRUE 值,因此查找不会寻找精确匹配。有趣的参数是第二个参数,即要使用的查找表。因为您将使用
INDEX()
选择要使用的列并重新排列它们,所以第三个参数也很简单,您使用的查找表的第二列是“2”。一个两列查找表???有四列?不是两个?是什么赋予了?
INDEX()
让您给它一个范围,然后从中选择一或多行和一或多列。事实上,这INDEX/MATCH
就是全部内容,尽管在这种情况下通常会寻找单个值。因此,您将使用INDEX()
从四列中仅选择两列,第一列将是查找列(这是如何VLOOKUP()
工作的),因此第二列将是结果列,即税率。当您以这种方式选择列或行时,您必须使用另一个需要确定行(一个或全部,但直接指定)的表达式,因此您不能执行“将该值留空”或“使用零来获取所有行/列”技术。在这种情况下,您需要原始表中的所有行,其中 8 行,因此使用常用方法之一:
ROW(1:8)
SEQUENCE(8)
(我相信 2019 年不可用)那么剩下的唯一魔法就是如何指定列。如果你有一个简单的情况,你可以只输入一个
array constant
like ,但是你需要三个可能的数组常量之一:{2,39,23,24,25,2,2,8,1,33}
这
IFS()
是任何简单的方法,因为很少。更多的?在某些时候,您更喜欢一个表和它自己的查找。必须经常更换吗?绝对更喜欢表格和公式中自己的查找。无论如何,这里很简单,所以我使用了一个IFS()
非常简单的(但超过公式长度的一半!)。尽管如此,最后一件事可能看起来很奇怪......为什么所有这些数组常量都以 1 结尾?好吧,那是因为原始表(您在问题中显示的表)具有您需要在 ITS 第 1 列中查找的值,并且您必须将它们放在第 2 列中以用于实际查找表,该表
INDEX()
正在动态创建。所以他们都有税率列排在第二位,所以VLOOKUP()
会起作用。INDEX()
此方法旨在具有指导意义,因此您可以使用该重新排序技术获得更多里程。它也适用于其他事情:FILTER()
作为一个大用途,但甚至VLOOKUP()
可以像这样采用一个数组常量。在这种情况下,它可能用于结果列。通过在数组常量中指定多个而不是像此公式中的普通 2 那样指定一个,您可以一次性获得多个结果。想要查找一件事,一次,并从查找表的五个列中获取结果?使用数组常量而不是单个列号。不需要五个单独的查找。还有其他功能也可以使用它。显然,“在当天”,
INDEX/MATCH
接受答案中的简单是最快、最简单的方法。现在有人认为XLOOKUP()
会是,也许那时就可以了。无论是当时还是现在,人们都不会喜欢上面的公式。我部分地以
VLOOKUP()
粉丝的身份回答(讨厌听到绝对错误的“它不会'向左看'”,例如:它在这个公式中这样做了三种方式!),但主要是为了展示一种可以做一些事情并强调它的一个重要方面INDEX()
以及它在其他一些常用功能中可以很方便的事实。