实现此目的的公式或脚本?

Formula or script to achieve this?

我想要实现的是这样的:

  1. 检查 IF 单元格 A1 的值存在于数组.
  2. 如果存在则获取"Defult"值,如果不存在则"Not in the list"。

我尝试了 HLOOKUP 和 VLOOKUP,但一次仅限于单个行/列:(

Look image at this link (i cant post images :/)

您的问题与在此 link 中发现的一个线程非常相似:http://www.mrexcel.com/forum/excel-questions/673515-finding-value-multiple-column-array-returning-column-header-excel-2003-a.html

关于这个问题的具体版本,这里有一个可行的公式。注意B1中的公式是数组公式,必须用CTRL+SHIFT+ENTER输入。

公式的思路是这样的:

  1. 遍历数组并查找与 A1 中单元格的匹配项。
  2. 如果有匹配项,则记录该匹配项的列(在数组中,因为这是一个数组公式)。这是使用COLUMN.
  3. 的逻辑
  4. 选中数组中的所有单元格后,使用 MAX 选择最大的列值 return。
  5. 现在有了正确的列,return 列 header 使用 INDEX

因为#3,如果有重复,你只会从最大的列中得到一个。

=INDEX($E:$G,MAX(IF($E:$G=A1,COLUMN($E:$G)-COLUMN($E)+1)))
(this is an array formula that must be entered with CTRL+SHIFT+ENTER)

该公式可以安全地复制到 B 列中。

相同的图像,但单元格已着色。

如果你想让这个公式在没有匹配的时候起作用,需要稍微修改它。你需要从INDEX中拆分出数组公式称呼。问题是没有匹配项,MAX returns 0。通常 INDEX 会拒绝 0,除了在数组公式中它显示为 return 第一个值。那样的话,就需要两个公式,第一个是数组公式,第二个是普通公式。

[B1, array formula]  =MAX(IF($E:$G=A1,COLUMN($E:$G)-COLUMN($E)+1))
[C1, normal]  =INDEX($E:$G,B1)

有了这些,您将 #VALUE! 搜索缺失。

我建议您对默认值使用不同的布局,以便于使用 VLOOKUP。与其为每个名字有多种拼写的人设置一栏,不如制作一个只有两栏的 table。左栏是备用拼写,右栏是您想要的。

在您的示例中 "John Smith" 有 3 个备选拼写。这将转换为三行,每行在右列中有 "John Smith"。