假设我有一个由 = unique()函数生成的文本值列(名为 Data )。此外,还有一系列模式可供查找和替换(查找和替换列)。
我应该使用哪个公式来扫描数据中的每个单元格以查找查找中的多个模式并替换它,如果匹配?
Data Find Replace Result
1 a c z a
2 b f y b
3 c e x z
4 d d
5 e x
6 c z
尝试 = SUBSTITUTE()和 = IF()函数,但是当我设置一个模式数组而不是单个模式时,它失败了。
答案 0 :(得分:1)
如果表格在A1:E7范围内,请尝试此公式
=TRANSPOSE(SPLIT(REGEXREPLACE(REGEXREPLACE(REGEXREPLACE(ARRAYFORMULA(CONCATENATE($B$2:$B$7&"|")),$C$2,$D$2),$C$3,$D$3),$C$4,$D$4),"|"))
您可以进一步了解此in an older post和google docs forum。
答案 1 :(得分:0)
数组解决方案
此公式需要替换范围,因此可用于可变数量的模式:
=QUERY(ARRAYFORMULA({REGEXMATCH(A2,$B$2:$B$4),
REGEXREPLACE(A2,$B$2:$B$4,$C$2:$C$4)}),
"select Col2 order by Col1 desc limit 1")
或者这个:
=INDEX(ArrayFormula(REGEXREPLACE(A2,$B$2:$B$4,$C$2:$C$4)),IFERROR(MATCH(A2,$B$2:$B$4,0),1))
或者这个:
=IFERROR(INDEX($C$2:$C$4,MATCH(A2,$B$2:$B$4,0)),A2)
需要拖延公式。
单一配方&阵列解决方案
这个单一的ArrayFormula也可以解决这个问题:
=ArrayFormula(trim(transpose(query({IF(--REGEXMATCH(TRANSPOSE(A2:A7),$B$2:$B$4)=1,
REGEXREPLACE(TRANSPOSE(A2:A7),$B$2:$B$4,$C$2:$C$4),"");
TRANSPOSE(if(--not(REGEXMATCH(A2:A7,JOIN("|",B2:B4))),A2:A7,""))},,COUNTA(A2:A)))))
或这个较短的公式:
=ArrayFormula(IFERROR(VLOOKUP(MATCH(A2:A7,B2:B4,0),{ROW(INDIRECT("a1:a"&COUNTA(C2:C4))),C2:C4},2,0),A2:A7))
请参阅Sample file
中的解释