Excel 365如何从长文本提取多匹配值生成文本或数组?
解决方案
针对Excel 365环境,以下公式可实现从C列食谱文本中提取所有匹配的食材(A列)和厨具(B列),并以空格分隔的文本形式返回:
D列(IngUsed:提取食材)
在D2单元格输入以下公式,下拉填充或利用Excel 365动态数组自动溢出到下方行:
=TEXTJOIN(" ", TRUE, FILTER($A$2:$A$31, ISNUMBER(SEARCH(" "&$A$2:$A$31&" ", " "&C2&" ")), ""))
E列(AppUsed:提取厨具)
在E2单元格输入以下公式,同理下拉或自动溢出:
=TEXTJOIN(" ", TRUE, FILTER($B$2:$B$31, ISNUMBER(SEARCH(" "&$B$2:$B$31&" ", " "&C2&" ")), ""))
公式说明
SEARCH(" "&$A$2:$A$31&" ", " "&C2&" "):给食材和食谱文本前后加空格,确保匹配完整单词,避免误识别(比如不会把"Butterfly"当成"Butter");SEARCH返回匹配位置,无匹配则返回错误值。ISNUMBER(...):将SEARCH结果转换为布尔值(匹配为TRUE,不匹配为FALSE)。FILTER($A$2:$A$31, ..., ""):按布尔值筛选A列中所有在C2食谱里出现的食材,无匹配时返回空文本。TEXTJOIN(" ", TRUE, ...):把筛选出的匹配项用空格连接成字符串,TRUE参数会忽略空值。
注意事项
- 若A/B列后续会新增条目,可将范围调整为更大的固定区域(比如
$A$2:$A$1000),或把A/B列转为Excel表格,让范围自动扩展。 - 若存在大小写不一致的情况(比如食谱写"flour",A列是"Flour"),可统一大小写后匹配,示例公式:
=TEXTJOIN(" ", TRUE, FILTER($A$2:$A$31, ISNUMBER(SEARCH(" "&UPPER($A$2:$A$31)&" ", " "&UPPER(C2)&" ")), ""))
内容的提问来源于stack exchange,提问作者Luciano Sampaio
相关产品推荐
相关产品推荐

