Google Sheets中匹配Sheet1与Sheet2连续四列并标记CANCELLED的方法
解决Google Sheets中匹配行标记需求的方案
没问题,我来帮你实现这个需求——当Sheet1某行的A-D列和Sheet2对应行的A-D列完全匹配时,在Sheet1的E列显示"CANCELLED"。下面给你两种实用的公式方案,适配不同的使用场景:
方案1:一次性批量处理整列(推荐)
这个方案用ARRAYFORMULA配合矩阵乘法,能自动应用到E列所有行,不用手动下拉填充,适合数据量较大的情况。
在Sheet1的E1单元格输入以下公式:
=ARRAYFORMULA(IF(MMULT(--(Sheet1!A:D=Sheet2!A:D),SEQUENCE(4,1,1,0))=4,"CANCELLED",""))
公式解释:
Sheet1!A:D=Sheet2!A:D:逐单元格比较两个工作表对应位置的内容,生成由TRUE/FALSE组成的数组--(...):把布尔值转换成数字(TRUE变1,FALSE变0)MMULT(..., SEQUENCE(4,1,1,0)):通过矩阵乘法计算每行中匹配的列数(4列全匹配的话结果为4)IF(..., "CANCELLED", ""):判断每行匹配数是否为4,是则显示"CANCELLED",否则留空
方案2:逐行处理(直观易读)
如果你用的是新版Google Sheets,支持BYROW和LAMBDA函数,这个方案逻辑更直观,逐行对比:
在Sheet1的E1单元格输入:
=BYROW(Sheet1!A:D, LAMBDA(current_row, IF(AND(current_row=OFFSET(Sheet2!A:D,ROW(current_row)-1,0,1,4)),"CANCELLED","")))
公式解释:
BYROW(Sheet1!A:D, LAMBDA(current_row, ...)):遍历Sheet1的每一行,把当前行内容传给current_row变量OFFSET(Sheet2!A:D,ROW(current_row)-1,0,1,4):定位到Sheet2中与当前行对应的那一行(取1行4列的区域)AND(current_row=...):判断当前行和Sheet2对应行的4列是否全部匹配IF(...):匹配成功则显示"CANCELLED",否则留空
额外优化:排除空白行
如果不想让空白行(Sheet1和Sheet2对应行都为空)也显示"CANCELLED",可以给公式加个判断条件,比如修改方案1的公式:
=ARRAYFORMULA(IF((MMULT(--(Sheet1!A:D=Sheet2!A:D),SEQUENCE(4,1,1,0))=4)*(Sheet1!A:A<>""),"CANCELLED",""))
这里用*(Sheet1!A:A<>"")确保只有Sheet1A列不为空的行才会参与判断。
内容的提问来源于stack exchange,提问作者Shantanu Kumar
相关产品推荐
相关产品推荐

