从列表中搜索多个条件的单元格并从列表中返回相应的值
Posted
技术标签:
【中文标题】从列表中搜索多个条件的单元格并从列表中返回相应的值【英文标题】:Search a cell for multiple critera from a list and return a corresponding value from the list 【发布时间】:2015-09-11 23:08:20 【问题描述】:这个例子应该清楚地解释我的问题
我有一个巨大的这种格式的值表(50,000+ 行)
PHRASE 1 | PHRASE 2 | VALUE
Sun | Blue | North
Moon | Green | South
Star | Red | West
我有一个格式为短语的列表(同样超过 50,000 行)
A B
1| Moon Fun Light Green |
2| Star Amazing Ball Red |
3| Sun Cat Inside Blue |
4| Star Dog Red Watch |
我需要按照以下几行搜索 - 如果您找到 PHRASE 1 和 PHRASE 2 都存在的行,则搜索 A1 返回相应的 VALUE
以下是我希望结果看起来如何的示例。 IE。搜索已检查顶部表中是否存在任何单词组合,并在可能的情况下返回适当的结果。不会有两组正面的问题,即 Moon Fun 和 Light Green。真正的值是所有艺术家姓名和曲目名称的组合。
A B
1| Moon Fun Light Green | South |
2| Star Amazing Ball Red | West |
3| Sun Cat Inside Blue | North |
4| Star Dog Red Watch | West |
几点说明:
要搜索的短语列表也充满了其他文本,即单元格将是“今晚月亮出来了,我在绿山上”。我们需要搜索短语表,看看是否找到了 Moon 和 Green 的组合,以及是否返回了相关值。我需要在搜索中包含多个条件,因为单个搜索词不足以缩小结果范围,我正在搜索的某些词是一般词或其他词的一部分(即 OFF 是OFFLINE) 返回错误的结果,因为搜索 OFF 和另一个术语同时解决了该问题。
短语列表不是固定格式,因此我无法通过拆分列来准确计算所有值,即它不全是“月亮 - 绿色”
我解决这个问题的方法是使用这个公式:
IF(AND(ISNUMBER(SEARCH(C2,E2)),ISNUMBER(SEARCH(D2,E2))),B2,"")
其中 C2 和 D2 是要搜索的值,E2 是要搜索的框,B2 是要返回的值。这个公式的问题是我一次只能搜索 1 个组合,即检查 C2 和 D2 而不是说检查 C2:C100 和 D2:D100 的数组
我试过把这个公式变成一个数组,但没有成功。
我也试过这个公式:
=IFERROR(LOOKUP(2, 1/(ISNUMBER(SEARCH($L$7:$L$8, E2))), $K$7:$K$8),"")m
但在这种情况下,它只能处理一个标准(即只搜索短语 1)而不是短语 1 和 2。$L$7:$L$8 是要搜索的列表,E2 是要搜索的框,$ K$7:$K$8 是要返回的对应值。
希望这足以继续。
【问题讨论】:
要搜索两个条件...您是否尝试过乘法或加法?理论上它应该给出它返回的索引 # 平方或 *2。还有……如果其中一个条件有错误,整个操作都会返回错误。 【参考方案1】:如果您愿意为每个数据集添加一个额外的列,那么这将起作用:
在您的第一个值表中添加一个索引列,其中仅包含一个 数量从 1 到 50,000+在您的短语表上添加此数组公式
=SUM(ISNUMBER(SEARCH(L$2:L$50000,E2))*ISNUMBER(SEARCH(M$2:M$50000,E2))*P$2:P$50000)
(其中 L 和 M 是包含您的短语的列,P 是索引列)
在查找中使用此列的结果。
如下所示,如果您不能(或不想)在您的第一个工作表中添加一列,您可以将公式更改为
=SUM(ISNUMBER(SEARCH(L$2:L$50000,E2))*ISNUMBER(SEARCH(M$2:M$50000,E2))*ROW(L$2:L$50000))
并使用 OFFSET 从您的 VALUE 列返回正确的条目。
【讨论】:
似乎是个好主意,但是您的索引列不与使用 ROW() 函数相同吗?另外,如果有多个匹配项,您是否需要使用 MIN(比如说)来获得第一个匹配项? 我的公式只会返回两个搜索都匹配的值。我假设不重复短语 1 - 短语 2 的组合。可以使用 ROW() 函数 - 我将编辑我的答案。 供将来参考,这两种解决方案都非常有效。我发现第一个选项在我的特定情况下最容易实现。感谢您的帮助。以上是关于从列表中搜索多个条件的单元格并从列表中返回相应的值的主要内容,如果未能解决你的问题,请参考以下文章
SwiftUI 移动列表单元格并在 CoreData 数据库中填充顺序
DataGridView如何通过按下escape来检测用户何时从编辑控件中出来?