【问题标题】:VLOOKUP with range where column location is not fixed具有列位置不固定的范围的 VLOOKUP
【发布时间】:2020-06-05 02:25:20
【问题描述】:

我的数据表有 3 列

  • 身份证
  • FNAME
  • LNAME

但顺序可能会在某个时候改变,例如

  • FNAME
  • 身份证
  • LNAME

  • LNAME
  • FNAME
  • 身份证

如何使用VLOOKUP 或其他方式查找给定 ID 的 FNAME。

【问题讨论】:

  • 你能补充一些例子吗?您正在查找什么范围内的 ID?
  • 您需要嵌套 INDEX/MATCH 以获得最快且非易失性的方式。
  • 新的XLookup 会更适合这个(如果你有支持它的版本)
  • ^ 我同意这一点。那确实会更好@chrisneilsen
  • 另一种选择是将数据制作成表格,然后使用Index/MatchXLookup 并使用结构化引用按名称引用列

标签: excel excel-formula range match vlookup


【解决方案1】:

为了支持我的评论,一种非易失的方法是嵌套一些 INDEXMATCH 函数。一个简化的例子:

D7中的公式:

=INDEX(A:C,MATCH("C",INDEX(A:C,,MATCH("ID",1:1,0)),0),MATCH("FNAME",1:1,0))

在上面我们返回 "FNAME" 其中 "ID" 是 C 动态。顺便说一句,VLOOKUP 与这种最佳功能组合的速度一样快,但很可能更慢。

【讨论】:

  • 不错。我认为VLOOKUP 无法处理“左侧的列”。那么它甚至是一种选择吗?您能否详细说明非易失性部分。请随时参考我的OFFSET 解决方案。
  • @VBasic2008,当然。 OFFSET 是所谓的 volatile 函数的成员。 Volatile 函数是一种导致每次 Excel 重新计算时重新计算其所在单元格中的公式的函数。 Excel 重新计算的触发器包括:输入数据、删除、插入、隐藏、取消隐藏、保存、双击行/列分隔符、重命名工作表、更改工作表位置、打开、关闭等。少数易失函数获胜不会受到太大的伤害,但是使用次数越多,这对性能的影响就越大。顺便说一句,不是我的 dv。
  • 不,VLOOKUP 不是选项 =)
  • 感谢您的信息。别担心,我不认为你会 dv,因为我的解决方案可能较差,但仍然有效。但我只有在找到工作解决方案时才会投票。在我的示例中,我可以像这样使用您修改后的解决方案:=INDEX($A:$C,MATCH($E2,INDEX($A:$C,,MATCH($E$1,$1:$1,0)),0),MATCH(F$1,$1:$1,0))。所以我的问题是你为什么不锁定任何范围?
  • 只是因为我不知道 OP 除了进行一次比较之外还想做什么。没有提及暗示必须拖动公式的多个查找值(因此我避免“锁定”或使用绝对引用)@VBasic2008。注意我提到的:“一个简化的例子” =)
【解决方案2】:

INDEX/MATCH 查找专长。偏移量

对于A1:C6 范围内的数据,您可以在单元格F2 中使用以下公式:

=INDEX(OFFSET($A$2:$A$6,0,MATCH(F$1,$A$1:$C$1,0)-1),MATCH($E2,OFFSET($A$2:$A$6,0,MATCH($E$1,$A$1:$C$1,0)-1),0))

向右下方复制。

怎么做?

初始公式为

=INDEX(B$2:B$6,MATCH($E2,$A$2:$A$6,0)

这基本上是“说”:

A2:A6范围内查找单元格E2的值,并从B2:B6范围内返回同一行中的值。

现在的问题是我们不知道我们的值在哪一列。所以我们将使用MATCH 函数来查找以FNAME 开头的它们:

=MATCH(F$1,$A$1:$C$1,0)

但由于我们将使用OFFSET,所以我们必须减去1

=MATCH(F$1,$A$1:$C$1,0)-1

现在我们得到了 FNAME 范围,我们使用范围 A2:A6 作为起始范围:

=OFFSET($A$2:$A$6,0,MATCH(F$1,$A$1:$C%1,0)-1)

想一想:

如果在A 列中找到FNAMEMATCH 将返回1OFFSET(A2:A6,,1) 返回范围 B2:B6。这就是为什么我们必须减去1

同样的原则将应用于查找范围 (ID):

=OFFSET($A$2:$A$6,0,MATCH($E$1,$A$1:$C%1,0)-1)

唯一的区别是我们必须将E1 锁定到$E$1(不是E$1),因为它对于列FG 是相同的。

【讨论】:

    【解决方案3】:

    VLOOKUP 非常适用于具有多列数据的表。这是我在 Libreoffice Calc 中使用的公式(类似于 Linux 中的 EXCEL),它引用表中 B10 上的 Country 查找($B$623:$B$684),如果找到(不是#NA)继续返回下一列,假设人口。如果未找到匹配项,则使用空白字段。

    注意第一个表有 B 和 B,而第二个查找有 B 和 C 引用第 2 列而不是第 1 列。这个想法可以扩展到多列。

    =IFNA(IF(VLOOKUP(B10,$B$623:$B$684,1,0)=B10,VLOOKUP(B10,$B$623:$C$684,2,0)),"")
    

    【讨论】:

      猜你喜欢
      • 2022-10-13
      • 2020-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多