📜  在 Excel 中执行区分大小写的 Vlookup 的不同方法

📅  最后修改于: 2021-09-23 05:03:41             🧑  作者: Mango

在 Excel 数据集中,有时您一定已经注意到,表中的许多值本质上是区分大小写的。如果我们想从我们的数据集中找到一个特定类型的值,但不幸的是,该值也有一些重复,但区分大小写,所以这里我们需要在区分大小写的基础上进行搜索。更糟糕的是,您只知道一种执行搜索功能的方法,即 VLOOKUP,并且本质上是不区分大小写的。你会怎么做?在不敏感的情况下执行 VLOOKUP 的唯一选择是使用不同的方法对其进行优化。

但首先,让我们通过一个例子来看看 VLOOKUP 是如何不区分大小写的:

现在,假设我们有一个公司的数据集,我们想要的是“KaTy”赚了多少钱,我们只知道执行它的 VLOOKUP函数。因此,直接应用 VLOOKUP 来查找“KaTy”是不可能的。尽管如此,应用 VLOOKUP 的输出将是

VLOOKUP 将寻找近似值,而不是精确匹配。VLOOKUP 将寻找第一个遇到的值并返回它。这是一个问题,首先,我们希望与提供的关键字完全匹配,其次,我们希望它搜索提供的整个范围。因此,我们将使用一些方法和函数来满足这些条件。

VLOOKUP 大小写敏感公式:

要使用公式完成上述任务,我们可以使用 VLOOKUP 的嵌入式公式,即您要查找值的范围、关键字或要查找的数值等。因此,执行上述任务的公式将是:

=VLOOKUP("KaTy",$A$2:$B$7,2)

这将产生与上例中相同的输出表。它将在其默认列中搜索“KaTy”关键字,即第 1 列。搜索范围为 A2 到 B7,即整个数据集和该关键字的值将从第二列中获取。

但是,我们希望通过使用某些方法或某些函数使其区分大小写。

在这里,我们将使用一个虚拟列,即在我们的公式中称为“辅助列”,但从技术上讲,该列对我们不可见,因为此辅助函数本质上是虚拟的。这里使用了两个函数,即 EXACT 和 CHOOSE。但首先,让我们应用该函数并逐个理解它。

=VLOOKUP(MAX(EXACT("KaTy",$A$2:$A$7)*(ROW($A$2:$A$7))),CHOOSE({1,2},ROW($A$2:$A$7),$B$2:$B$7),2,0)

这将产生以下输出:

现在,这些区分大小写的值,当专门调用时,将为它们中的每一个返回单独的值,而不是每次都返回 27 作为冗余数据。但是,这个公式是如何工作的呢?让我们一点一点地理解它:

  • EXACT(“KaTy”,$A$2:$A$7)——Exact 总是创建一个布尔数组,当给定范围内的给定关键字有精确的副本匹配时,它将存储真值,在这种情况下,是A2 TO A7.So,这种情况下的数组看起来像
{ FALSE;FALSE;TRUE;FALSE;FALSE;FALSE}
  • (EXACT(“KaTy”,$A$2:$A$7)*(ROW($A$2:$A$7))——这个方法会乘以上面由EXACT创建的数组的每个布尔值,并将乘以它带有从 A2 到 A7 的每个单元格的行号。并且,每当返回值为 TRUE 时,它将将该条目的行号放在同一索引中,在新创建的数组中,并且每当值不匹配时,它将返回 0。请记住,我们从 A2 开始我们的范围,因此第 2 行将是我们的初始搜索行。现在,由于第 4 行包含“KaTy”,因此返回的数组会将数字 4 放入新创建数组的第 4 个索引。数组将如下所示:
{0;0;4;0;0;0}
  • (CHOOSE({1,2},ROW($A$2:$A$7),$B$2:$B$7)–这里真正的魔法仅由CHOOSE函数完成。这个函数也会创建一个数组,但是数组看起来与上面的数组不同。这个函数基本上会注册第一个范围内遇到的每个单元格的行号,即 A2 到 A7,并将从第二个范围,即 B2 到 B7 分配它们对应的值。这里, {1,2} 将表示每个元素的性质,即值将如何存储在数组中。每个元素都有行号并与之对应,它的值。所以,数组看起来像
{2,16;3,27;4,6;5,18;6,32;7,11}

在这里您可以看到,我们为数据集的每个参数赋予了这个唯一标识,并且这里也进行了区分大小写。

  • (MAX(EXACT(“KaTy”,$A$2:$A$7)*(ROW($A$2:$A$7)))– 这将返回最大值,或者我们应该说“KaTy”所在的行号” 存储在数据集中。因此,如果您查看 EXACT函数返回的数组,则 MAX 值将为 4。

VLOOKUP 将查看虚拟数组,或 CHOOSE函数创建的辅助数据集,MAX 和 EXACT 将引导 VLOOKUP函数。

文本值中的总和:

现在,如果您只需要查找数字,并且您的返回值也是数字,那么这里我们可以使用 SUMPRODUCT 方法。这种方法将帮助我们直接乘以值,不使用任何辅助列,并对其应用函数,从而节省我们的时间。此方法的声明将如下所示:

=SUMPRODUCT (--(1st array),array2*,array3*,...)

用asterick(*) 标记的参数是可选的数组(或列),如果不提供,它将查找第一个数组的值的总和。此公式中的“-”仅应用于第一个数组,它将相应地将 TRUE/FALSE 值转换为 0/1,因为 SUMPRODUCT 在数值数组中起作用。

为了理解上述语法,我们将看一个例子——

在这个数据集中,错误地将印度的 GDP 写成两列,我们必须返回印度 GDP 的总值。因此,我们将使用 SUMPRODUCT 来完成任务。首先公式是:

=SUMPRODUCT(--(A2:A6="INDIA"),B2:B6)

当这个公式应用于C2列时,在列名“CORRECTED GDP”下,返回的数据集将是:

现在,这是怎么发生的? SUMPRODUCT 做了什么?首先,看一下 SUMPRODUCT 的实现中发生了什么的表示:

这里,如上所述,“-”将“=”函数的返回值转换为TRUE或FALSE,并将TRUE转换为1,FALSE转换为0。然后sumproduct对这两个数组进行乘法函数(列),上面的表示显示了它是如何完成的。

我们在A2到A6中搜索关键字“INDIA”,通过“-”(双否定)转换后,将对应的值相乘,结果存入其他列,命名为CORRECTED GDP。 所以,印度修正后的 GDP 为 5 万亿美元。

INDEX MATCH,一种区分大小写搜索的 LOOKUP 方法:

INDEX MATCH 可能是在 Excel 中进行区分大小写查找的最佳竞争者。但为什么?有一些要点使 INDEX MATCH 查找方法在查找区域中非常可取-

  1. 无论您拥有什么数据类型,都必须查找,无论是文件、文本、数字、字母数字等,它几乎兼容您想要的任何数据类型。
  2. 如果您了解LOOKUP方法的基础知识,您必须知道该方法需要您对查找列进行排序,但是在INDEX MATCH中,没有这样的问题,即它也适用于未排序的查找列。
  3. 它也不需要任何辅助列。

在这里,单独的 MATCH函数或 INDEX函数无法实现区分大小写的查找,因此我们将使用称为 EXACT 的方法。由于 EXACT 正在帮助 VLOOKUP 实现区分大小写,这里 EXACT 结合 MATCH 和 INDEX函数将使 INDEX MATCH 方法区分大小写。

此方法的语法为:

{=INDEX(data from which value will be fetched by searching,MATCH(TRUE/FALSE,EXACT(Lookup Column Range,key),0))}

注意:由于此公式被视为数组函数,因此我们将使用 Ctrl+Shift+Enter 来执行该公式。

现在,我们将通过一个例子来理解这个公式的工作原理和语法——

现在,在这个数据集中,数据录入人犯了一个错误,在同一个数据集中输入了两次INDONESIA的GDP,我们知道带有“INDO”关键字的那个是正确的,我们将获取它的GDP。现在,我们将使用 INDEX MATCH 来完成它。这个公式将是:

{=INDEX($B$2:$B$7,MATCH(TRUE,EXACT($A$2:$A$7,"INDO"),0))}

这将为我们输出“INDO”,即印度尼西亚的 GDP,为 2.1。

现在,我们将逐个了解它的工作原理:

  1. EXACT($A$2:$A$7,”INDO”)——这将在给定的范围内搜索关键字“INDO”,即从A2到A7,匹配将是精确的。
  2. MATCH(TRUE,EXACT($A$2:$A$7,”INDO”)——这将返回给我们的行号,在该行上给定的关键字已完全匹配,在本例中为 5。
  3. INDEX($B$2:$B$7,MATCH(TRUE,EXACT($A$2:$A$7,”INDO”),0))——这将搜索给定范围内的值,在该范围内给定的关键字范围 A2 到 A7 已匹配,即它将返回 2.1 给我们。