谷歌表格:当另一列值变化时用序列信息更新指定列的方案
谷歌表格解决方案:按分组填充序列值
针对你的需求,这里提供两种无需VLOOKUP(避免大数据量性能问题)和ISODD(适配分组列含文本的场景)的谷歌表格公式方案:
方案一:按分组出现顺序循环预设动物列表
如果你的需求是按分组首次出现的顺序,循环使用预设的动物序列(比如dog→cat→dog→cat...),可以用以下数组公式:
=LET( groups, B:B, animals, A:A, unique_groups, UNIQUE(FILTER(groups, groups<>"")), group_order, XMATCH(groups, unique_groups), animal_cycle, {"dog", "cat"}, IF(animals<>"", animals, INDEX(animal_cycle, MOD(group_order-1, COUNTA(animal_cycle))+1)) )
公式说明:
UNIQUE(FILTER(groups, groups<>"")):提取所有非空分组,保留首次出现的顺序XMATCH(groups, unique_groups):标记每行分组在唯一分组列表中的位置序号MOD(group_order-1, COUNTA(animal_cycle))+1:用取模运算实现动物序列的循环IF(animals<>"", animals, ...):保留A列已有值,仅填充空值
方案二:优先使用分组首次出现的动物值,空分组自动循环
如果需要优先使用每个分组首次出现时的A列值,仅当分组首次出现时A列为空,才按顺序循环填充,可以用:
=LET( groups, B:B, animals, A:A, unique_groups, UNIQUE(FILTER(groups, groups<>"")), first_animal, MAP(unique_groups, LAMBDA(g, INDEX(FILTER(animals, groups=g), 1))), filled_list, IF(first_animal<>"", first_animal, INDEX({"dog", "cat"}, MOD(XMATCH(unique_groups, unique_groups)-1, 2)+1)), XLOOKUP(groups, unique_groups, filled_list, "") )
公式说明:
MAP(unique_groups, LAMBDA(g, INDEX(FILTER(animals, groups=g), 1))):获取每个分组首次出现时的A列值IF(first_animal<>"", first_animal, ...):如果分组首次有动物值就用它,否则自动循环dog/catXLOOKUP:将处理后的分组对应值匹配到所有行,确保同一分组的填充值统一
使用提示:
- 以上公式均为数组公式,输入到A列第一个空单元格后,会自动填充所有符合条件的行
- 如果你的动物序列不止
dog/cat,只需修改公式中的{"dog", "cat"}为你需要的序列即可 - 若分组列包含文本,两个方案都能正常适配,无需额外处理
内容的提问来源于stack exchange,提问作者Beket Kassymbekov
相关产品推荐
相关产品推荐

