【问题标题】:Looking up values within a range of cells在单元格范围内查找值
【发布时间】:2017-12-06 18:27:04
【问题描述】:

假设我在 Excel 中有以下数据表

Company Amount  Text
Oracle  $3,400  330 Richard ERP
Walmart $750    348 Mary ERP
Amazon  $6,880  xxxx Loretta ERP
Rexel   $865    0000 Mike ERP
Toyota  $11,048 330 Richard ERP

我想浏览“文本”列中的每个项目,根据以下名称范围搜索项目:

Mary 
Mike 
Janine 
Susan 
Richard 
Jerry 
Loretta 

如果找到,则返回“Person”列中的名称。例如:

Company Amount  Text    Person
Oracle  $3,400  330 Richard ERP Richard
Walmart $750    348 Mary ERP    Mary
Amazon  $6,880  xxxx Loretta ERP    Loretta
Rexel   $865    0000 Mike ERP   Mike
Toyota  $11,048 330 Richard ERP Richard

我在 Excel 中尝试了以下方法:

=IF(N2="","",
IF(ISNUMBER(SEARCH(Sheet2!$A$1,N2)),Sheet2!$A$1,
IF(ISNUMBER(SEARCH(Sheet2!$A$2,N2)),Sheet2!$A$2,
IF(ISNUMBER(SEARCH(Sheet2!$A$3,N2)),Sheet2!$A$3,
....

其中 $A$1:$A$133 是我的范围,N2 是“文本”列值;但是,这是很多嵌套代码,显然 Excel 对您可以拥有的嵌套 IF 语句的数量有限制。

有没有更简单的解决方案(数组?VBA?)

谢谢!

【问题讨论】:

    标签: arrays excel search excel-formula lookup


    【解决方案1】:

    使用以下公式:

    =IFERROR(INDEX(Sheet2!A:A,AGGREGATE(15,6,ROW(Sheet2!$A$1:INDEX(Sheet2!A:A,MATCH("zzz",Sheet2!A:A)))/(ISNUMBER(SEARCH(Sheet2!$A$1:INDEX(Sheet2!A:A,MATCH("zzz",Sheet2!A:A)),N2))),1)),"")
    

    【讨论】:

    • @Scott 看起来不错,但我不知道它是如何工作的。这意味着我不能在其他情况下自己使用它……想补充一些解释吗?还是您宁愿将其保留为一些秘密的魔法公式? (请记住,您已经在另一个问题中提到了这个解决方案......)
    • @PeterPesch INDEX(Sheet2!A:A,MATCH("zzz",Sheet2!A:A)) 查找列中包含文本的最后一个单元格。它是一种用于限制迭代次数的方法。 / 聚合后的布尔值跟随强制为 0/1,具体取决于它是否为 False/True。 0 返回错误,聚合中的 6 强制公式忽略,因此仅返回布尔值为真的行号。聚合然后查看剩余的数字并将最低的数字返回给 INDEX,但是对公式进行简单的评估就会给你。
    • 谢谢!今天晚些时候我会去看看。目前在使用 duch 版 excel 的计算机上,所以公式不容易识别。
    • 不幸的是,这台计算机运行 Excel 2007(它没有 AGGREGATE 函数),因此您的公式现在返回一个空字符串(因为它捕获了错误)。
    • 然而,这个系统足以分析你的公式的其余部分。 MATCH("zzz",Sheet2!A:A) 是个不错的技巧;但是,我可能会使用 =Sheet2!$A$1:INDEX(Sheet2!A:A,MATCH("zzz",Sheet2!A:A)) 的名称,因为我肯定会在我的 excel 文档中多次引用该查找表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多