谷歌表格使用ArrayFormula实现按邮箱匹配应用的数组公式求解
谷歌工作表逐邮箱匹配应用的自动数组公式方案
- 单格公式无法直接套
ArrayFormula的核心原因是FILTER、JOIN不支持批量迭代数组输入,需搭配BYROW函数实现逐行自动计算。 - 将以下公式粘贴到Sheet2的B2单元格即可,无需手动下拉,A列后续新增的唯一邮箱会自动生成对应计算结果:
=BYROW(A2:A,LAMBDA(each,IF(each="","",IFERROR(REGEXMATCH(JOIN(",",FILTER(Sheet1!$B$2:$B,Sheet1!$A$2:$A=each)),$C$1),""))))
公式说明
BYROW(A2:A,LAMBDA(each,...))遍历A列第二行起的所有单元格,逐行将单元格值传入each变量处理- 内置空值判断
IF(each="","",...),避免A列空白行返回无效错误 - 核心匹配逻辑和你原有单格公式完全一致,仅将固定引用的
$A2替换为逐行动态传入的each变量
可选优化方案
匹配成功返回合并后的应用字符串
如果需要匹配到内容后返回逗号分隔的应用列表而非布尔值TRUE/FALSE,使用以下版本:
=BYROW(A2:A,LAMBDA(each,IF(each="","",IFERROR(LET(merged,JOIN(",",FILTER(Sheet1!$B$2:$B,Sheet1!$A$2:$A=each)),IF(REGEXMATCH(merged,$C$1),merged,"")),""))))
普通文本模糊匹配(规避正则特殊字符问题)
如果C1内容包含./*+?等正则特殊字符,不需要正则规则匹配,仅需要普通文本模糊搜索,使用以下版本:
=BYROW(A2:A,LAMBDA(each,IF(each="","",IFERROR(LET(merged,JOIN(",",FILTER(Sheet1!$B$2:$B,Sheet1!$A$2:$A=each)),IF(ISNUMBER(SEARCH($C$1,merged)),merged,"")),""))))
内容的提问来源于stack exchange,提问作者rawat
相关产品推荐
相关产品推荐

