不同命名表中的间接索引和匹配问题公式

Indirect index and match problem formula in different named tables

我有一个单元格,我想根据条件

获取税率

来自“税收”,取决于制造商所在国家/地区、发布年份和车型

我尝试使用搜索和索引,但它根本不起作用,我需要单元格来检查制造商所在国家/地区的值、发布年份和汽车类型,使用这些输入转到税收 sheet 并得到值

在开始之前,我应该坦白说我是 OFFSET() 函数的传播者,也是 INDIRECT() 的死敌。

让我们假设每个国家/地区的车辆类型(TRUCKS、SEDANS,....)数量相同,即 8。(如果不是,则可以通过更多努力解决)。您可以将此数字放在某处的单元格中,并在需要类型数量时使用它。

此外,假设您屏幕截图中的第一列是 A 列。A1 单元格包含“中国”。

假设我们正在寻找法国 SEDANS 在 2009 年的税率。

函数 1:

=MATCH("France",$A:$A,0) will return 14 (if I have counted correctly) 

...即单元格 A14 包含单词“法国”。

假设所有国家/地区的年份都相同,我们可以使用 header 行中的任何一行来找到正确的列。

函数 2:

=MATCH(2009,:,0)-1 will return 8 I think. 

如果您的年份只是一串文本,请将 2009 替换为“2009”。

因为您的类型在每个 table 中的顺序都不相同(为什么?)我们需要一个额外的步骤。

函数 3:

=MATCH("SEDANS",OFFSET($A,(Result of f1) -1 + 3,0,8,1),0) should return 3. 

OFFSET 函数中的数学是什么?我需要从单元格 A1 向下 (14-1) 行才能到达“法国”。从那里我需要再往下走 3 行才能到达类型列表的第一个,并且有 8 种类型可供搜索。然后我正在查看 8 行 x 1 列的单元格范围。

现在您可以提取税率,使用

函数 4:

=INDEX(OFFSET($A,(Result of f1) -1+3,1,8,100),(Result of f3),(Result of f2))

(我输入了 100,因为我不知道你有多少年的列。你可以使用类似 =COUNTA($3:$3)-1 的东西,如果在最后日期)。

我会在您测试时将每个函数的结果放在一个单元格中。一旦您对每个步骤都正常工作感到满意,您就可以将所有不同的函数嵌套在一起,或者只是在结果的右侧放置一些额外的列 table,如果需要,您可以将其隐藏。

已编辑:在单元格引用上添加一些 $ 以锁定数据的“来源”。

如果您的税收 table 是真实的 Tables,每个 NAME 都带有相应国家/地区的名称,你可以使用类似的东西:

=VLOOKUP(H13,INDIRECT(H12),MATCH(TEXT(H14,"0"),INDIRECT(H12 & "[#Headers]"),0))

哪里

  • H12包含国家名称
  • H13 包含车辆类型
  • H14 包含年份

例如:

  • 您需要根据您的实际范围进行调整,但这提供了一种方法。
  • 我建议在 H13:H14 中使用下拉列表(来自数据验证)以避免拼写错误。

如果您想避免使用表格以及可变函数 OFFSETINDIRECT(因为如果您有很多可变函数,它们会影响工作表的性能)您可以尝试non-volatile,但更长更晦涩:

=VLOOKUP($H,INDEX($A:$A,MATCH($H,$A:$A,0)):INDEX($D:$D,LOOKUP(2,1/($A:$A<>""),ROW($A:$A))),$H-2000,FALSE)

在上面,你必须做出调整

假设是:

  • 国名在相关税费之上table
  • 税 table 从 A 列开始
    • 如果 A 列不是从那里开始,请更改对 A 列的引用。
    • 将对 D 列的引用更改为税的最后一列 table(如果您要扩展它,甚至更远)。
  • 所有国家/地区的年份列都标记相同(例如:从 2002 年开始的连续年份)
  • $H-2000 计算 VLOOKUP 函数的列参数。