Office 365动态数组:多列软件版本提取最高值需求
提取可变列数软件版本数据中的每行最高版本(Office 365动态数组方案)
核心逻辑
软件版本号(如1.3.2、2.1)属于多段层级结构,直接按文本比较会出错,需先拆分各数字段转为数值,再按层级从高到低排序后取首位。
英语Office版本公式
适用于英语界面的Office 365,直接输入到结果列首行(如G2),动态数组会自动溢出填充所有行:
=BYROW(A2:INDEX(A:A,COUNTA(A:A)),LAMBDA(row,LET( versions, FILTER(row, row<>""), nums, TEXTSPLIT(versions, "."), valued, --nums, ranked, SORTBY(versions, BYCOL(valued, LAMBDA(col, SORT(col,,-1))),,-1), INDEX(ranked, 1) )))
公式拆解
BYROW(A2:INDEX(A:A,COUNTA(A:A)), ...):遍历从A2开始到最后有数据的行versions:过滤当前行的空单元格,仅保留有效版本号nums:将每个版本号按.分割为单独的数字文本段valued:把分割后的文本转成数值类型,用于比较大小ranked:按版本的各数字段层级从高到低排序(先比主版本,再次版本,以此类推)INDEX(ranked,1):取排序后的第一个值,即当前行的最高版本
法语Office版本公式
适配法语界面的Office 365,函数名替换为法语对应名称:
=PAR.LIGNE(A2:INDEX(A:A,NBCAR(A:A)),LAMBDA(ligne,LET( versions, FILTRE(ligne, ligne<>""), nums, DIV.TEXTE(versions, "."), valued, VALEUR(nums), ranked, TRIER.SUR(versions, PAR.COLONNE(valued, LAMBDA(col, TRIER(col,,FALSE))),,FALSE), INDEX(ranked, 1) )))
注意事项
- 版本号需统一格式:所有版本必须使用
.作为分隔符,若包含前缀(如v1.2),需在versions后添加替换逻辑,英语用SUBSTITUTE(versions,"v",""),法语用REMPLACER(versions,"v","") - 动态列适配:公式会自动忽略空列,新增版本列后无需修改公式,FILTER会自动纳入有效数据
- 异常处理:若某行无有效版本号,公式会返回
#CALC!,可添加IFERROR包裹公式返回空值,如英语版本开头加=IFERROR(BYROW(...),"")
内容的提问来源于stack exchange,提问作者MonkeyJLuffy
相关产品推荐
相关产品推荐

