答案1
这可以在不使用易变的 Offset 的情况下使用 Index/Match 来完成。这里的挑战是,您首先必须找到要执行匹配的列。可以使用工资列上的 Index 找到此列,使用精确匹配来查找第 2 行中的申报状态。请注意,行的第二个参数保持为空。然后 Index 将返回一个范围,而不是单个单元格。
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))
答案2
使用LOOKUP
Excel 中的普通函数。表格排序很重要。有了该值,您就可以执行 VLOOKUP,就像在公式中一样。
我会使用OFFSET
和MATCH
根据状态移动查找范围。例如,您的公式可能如下所示:
=LOOKUP(H1,OFFSET(C3:C9,0,MATCH(H2,C2:E2,0)-1),B3:B9)
您可以在这里找到更多相关信息:https://exceljet.net/formula/lookup-value-between-two-numbers
答案3
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()
工作原理),第二列将是结果列,即税率。
当您以这种方式选择列或行时,您必须对另一个列或行使用一个表达式,该表达式要求确定的行(一行或全部,但直接指定),因此您不能使用“将该值留空”或“使用零来获取所有行/列”技术。在这种情况下,您需要原始表中的所有行(其中八行),因此请使用其中一种常用方法:
ROW(1:8)
SEQUENCE(8)
(我认为 2019 年不会推出)
那么剩下的唯一魔法就是如何指定列。如果情况简单,您可以直接输入array constant
“like” ,但在某些情况下,您需要以下三个可能的数组常量之一:{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()
和它在其他一些常用功能中很方便的事实。