Table of contents
本教程解释了如何使Excel VLOOKUP区分大小写,演示了其他几个区分文本大小写的公式,并指出了每个函数的优势和局限性。
我猜每个Excel用户都知道在Excel中执行垂直查找的函数是什么。 对,就是VLOOKUP。 然而,很少有人知道Excel的VLOOKUP是不分大小写的,也就是说它把小写字母和大写字母视为相同的字符。
下面是一个快速的例子,证明VLOOKUP无法区分文本大小写。 假设你在A2单元格有 "bill",A4单元格有 "Bill",下面的公式会抓住 "bill",因为它在查找数组中排在第一位,并从B2返回一个匹配值。
=VLOOKUP("Bill", A2:B4, 2, FALSE)
在本文中,我将向你展示一种使VLOOKUP区分大小写的方法。 我们还将探讨其他几个可以在Excel中进行区分大小写匹配的函数。
区分大小写的VLOOKUP公式
如上所述,通常的VLOOKUP公式不识别字母大小写。 然而,有一种方法可以使Excel的VLOOKUP对大小写敏感,如下例所示。
假设你有 项目IDs 问题是ID包括小写字母和大写字母。 例如,A4(001Tvci3u)和A5(001Tvci3U)中的值只在最后一个字符上有所不同,分别是 "u "和 "U"。
当查询 "001Tvci3 U ",一个标准的VLOOKUP公式输出90美元,与 "001Tvci3 "相关。 u 因为它在 "001Tvci3 "之前。 U "但这不是你想要的,对吗?
=vlookup(f2, a2:c7, 2, false)
为了在Excel中执行区分大小写的查询,我们结合了VLOOKUP、CHOOSE和EXACT函数。
vlookup(true, choose({1,2}, exact( 查找_值 , lookup_array ), return_array ), 2, 0)这个通用公式在所有情况下都能完美地发挥作用。 你甚至可以查到 从右到左 赞扬Pouriya提出的这个简单而优雅的解决方案!这也是普通VLOOKUP公式无法做到的。
在我们的案例中,实际公式如下。
要在F3中拉动价格。
=vlookup(true, choose({1,2}, exact(f2, a2:a7), b2:b7), 2, false)
为了获取评论,F4。
=vlookup(true, choose({1,2}, exact(f2, a2:a7), c2:c7), 2, false)
注意:在除Excel 365以外的所有Excel版本中,这只能作为一个数组公式使用,所以记得按Ctrl + Shift + Enter来正确完成。 在Excel 365中,由于支持动态数组,它也可以作为一个普通公式使用。
这个公式如何运作。
做到这一点的核心部分是带有嵌套EXACT的CHOOSE公式。
选择({1,2}, exact(f2, a2:a7), c2:c7)
这里,EXACT函数将F2中的值与A2:A7中的每个值进行比较,如果它们完全相同,包括字母大小写,则返回TRUE,否则返回FALSE。
{false;false;false;true;false;false}。
对于 index_num 的参数,我们使用数组常数{1,2}。 结果,该函数将上述数组的逻辑值和C2:C7的值合并为一个二维数组,如图所示。
{FALSE,155;FALSE,186;FALSE,90;TRUE,54;FALSE,159;FALSE,28}
VLOOKUP函数从这里出发,在二维数组(由逻辑值表示)的第一列中搜索查找值(为TRUE),并从第二列中返回一个匹配值,这就是我们要寻找的价格。
vlookup(true, {false,155;false,186;false,90;true,54;false,159;false,28}, 2, 0)
区分大小写的XLOOKUP公式
微软365的用户可以用更简单的公式在Excel中进行区分大小写的查询。 正如你所猜测的,我说的是VLOOKUP的一个更强大的继承者--XLOOKUP函数。
因为XLOOKUP分别对查找和返回数组进行操作,所以我们不需要前面例子中的二维数组技巧。 简单地说,使用EXACT为 lookup_array 争论。
xlookup(true, exact( 查找_值 , lookup_array ), return_array , "未找到")最后一个参数("未找到")是可选的。 它只是定义了在没有找到匹配的情况下要返回什么值。 如果你省略它,那么在公式没有找到的情况下,将返回一个标准的#N/A错误。
对于我们的样本表,这些是要使用的区分大小写的XLOOKUP公式。
要在F3中获得价格。
=XLOOKUP(TRUE, EXACT(F2, A2:A7), B2:B7, "未找到" )
要提取评论F4。
=XLOOKUP(TRUE, EXACT(F2, A2:A7), C2:C7, "未找到")
这个公式如何运作。
像前面的例子一样,EXACT返回一个TRUE和FALSE值的数组,其中TRUE代表大小写敏感的匹配。 XLOOKUP在上述数组中搜索TRUE值,并返回一个匹配,从 return_array 请注意,如果在查找列中有两个或更多完全相同的值(包括字母大小写),该公式将返回第一个找到的匹配值。
XLOOKUP限制 术语:仅在Excel 365和Excel 2021中可用。
SUMPRODUCT--区分大小写的查询,返回匹配的数字
正如你从标题中了解到的,SUMPRODUCT是另一个可以进行大小写查询的Excel函数,但它可以返回 数值 如果这不是你的情况,那就跳到INDEX MATCH的例子,它为所有数据类型提供了一个解决方案。
正如你可能知道的,Excel的SUMPRODUCT将指定数组中的组件相乘,并返回乘积的总和。 由于我们想要一个区分大小写的查询,我们使用EXACT函数来获得第一个数组。
=sumproduct((exact(a2:a7,f2) * (b2:b7))
遗憾的是,SUMPRODUCT函数不能返回文本匹配,因为文本值不能被相乘。 在这种情况下,你会得到一个#VALUE!错误,就像下面截图中的F4单元格。
这个公式如何运作。
与VLOOKUP的例子一样,EXACT函数将F2中的值与A2:A7中的所有值进行核对,如果大小写匹配则返回TRUE,否则返回FALSE。
总产品(({false;false;false;true;false}*{155;186;90;54;159;28})
在大多数公式中,Excel将TRUE评估为1,将FALSE评估为0。 因此,当SUMPRODUCT将两个数组的元素乘以相同的位置时,所有非匹配(FALSE)都变成了0。
SUMPRODUCT({0;0;0;54;0;0})
结果,该公式从B列返回一个数字,该数字与A列中的大小写精确匹配。
SUMPRODUCT限制 :只能返回数字值。
INDEX MATCH - 对所有数据类型进行区分大小写的查询
最后,我们接近获得一个无限制的大小写查询公式,它可以在所有Excel版本和所有数据集上工作。
这个例子放在最后,不仅是因为最好的要留到最后,而且还因为你在前面的例子中获得的知识可能有助于你更好地理解大小写的MATCH INDEX公式。
在Excel中,INDEX和MATCH函数的组合经常被用作VLOOKUP的更灵活和多功能的替代品。 以下文章很好地解释了这两个函数是如何一起工作的(希望如此:)--使用INDEX MATCH代替VLOOKUP。
在这里,我只提醒你关键点。
- MATCH函数在指定的查找数组中搜索查找值并返回其相对位置。
- 查询值的相对位置直接到 行数_num 的参数,指示它从该行返回一个值。
为了使公式能够识别文本大小写,你只需要在经典的INDEX MATCH组合中增加一个函数。 很明显,你又需要EXACT函数。
INDEX( return_array , match(true, exact( 查找_值 , lookup_array ), 0))F3中的真实公式是。
=index(b2:b7, match(true, exact(a2:a7, f2), 0))
在F4中,我们正在使用这个。
=index(c2:c7, match(true, exact(a2:a7, f2), 0))
请记住,它只在除Excel 365以外的所有版本中作为数组公式工作,所以一定要通过同时按Ctrl + Shift + Enter键来输入。 如果操作正确,该公式将被括在大括号中,如下面的截图所示。
这个公式如何运作。
就像之前所有的例子一样,EXACT对A2:A7中的每一个与F2中的值完全匹配的值返回TRUE。 因为我们用TRUE来表示 查找_值 的MATCH,它返回精确大小写匹配的相对位置,这正是INDEX在返回B2:B7的匹配时需要的。
先进的区分大小写的查找公式
上面提到的INDEX MATCH公式看起来很完美,对吗? 但事实上,它不是。 让我告诉你为什么。
假设返回列中与查询值相对应的单元格是空白的,那么公式会返回什么呢? 什么也没有。 现在,让我们看看它实际返回的结果。
=index(c2:c7, match(true, exact(a2:a7, f2), 0))
哎呀,公式返回一个零!也许,当只处理文本值时,这并不重要。 但是,如果你的工作表包含数字,而且其中一些是真正的零,这就是一个问题。
事实上,前面讨论的所有其他查找公式的行为方式都是一样的。 但现在你想要一个无可挑剔的公式,不是吗?
为了使大小写敏感的INDEX MATCH公式绝对完美,你把它包裹在IF函数中,该函数检查返回单元格是否为空白,在这种情况下不返回任何东西。
=IF(INDIRECT("C"&(1+MATCH(TRUE,EXACT(A2:A7, F2), 0))", INDEX(C2:C7, MATCH(TRUE, EXACT(A2:A7, F2), 0)), " ")
在上述公式中。
- "C "是返回栏。
- "1 "是指将一个 相对位置 将MATCH函数返回的单元格中的 真实的细胞地址 .
例如,我们的MATCH函数中的查找数组是A2:A7,意味着A2单元格的相对位置是 "1",因为这是数组中的第一个单元格。 但实际上,查找数组从第2行开始。 为了补偿差异,我们加上1,所以INDIRECT函数将从右边的单元格返回一个值。
下面的截图展示了改进后的区分大小写的INDEX MATCH公式的运行情况。
如果返回单元格为空,则该公式不输出任何东西(一个空字符串)。
如果返回单元格包含一个0,则公式返回0。
如果你想在返回单元格为空时显示一些信息,可以在IF的最后一个参数中用一些文本替换一个空字符串("")。
=IF(INDIRECT("C"&(1+MATCH(TRUE, EXACT(A2:A7, F2), 0))", INDEX(C2:C7, MATCH(TRUE, EXACT(A2:A7, F2), 0)), "没有什么可以返回,对不起。")
做区分大小写的VLOOKUP的一个简单方法
我们的Excel终极套件的用户有一个特殊的工具,可以使在大型和复杂的表格中查找更容易和无压力。 最重要的是,合并两个表格有一个区分大小写的选项,下面的例子显示了它的作用。
假设你想拉出数量。 查询 表到 主要内容 基于唯一的项目ID的表。
你要做的是运行合并表向导并执行这些步骤。
- 选择要拉入新数据的主表。
- 选择查找新数据的查询表。
- 选择一个或多个关键列(在我们的例子中是项目ID)。 并确保检查 区分大小写的匹配 箱子。
一会儿,你就会得到想要的结果 :)
这就是如何在考虑到文本大小写的情况下在Excel中进行查询。 感谢你的阅读,希望下周能在我们的博客上见到你
供下载的实践工作手册
区分大小写的VLOOKUP例子(.xlsx文件)。