提问人:user3225975 提问时间:10/14/2023 更新时间:10/15/2023 访问量:56
手动进行更改时对任务列表重新排序
Re-sequencing a list of tasks when a change is made manually
问:
我有一个表格,其中包含第一列中按 1-41 顺序排列的任务列表。我想通过在中间列中放置任务编号来手动覆盖序列,并在“结果序列”列中重新计算序列。
该问题围绕着被覆盖的顺序任务。
数据在表格中,所以我试图避免数组公式,但在这一点上,我对任何事情都持开放态度。
如果有人知道一种方法来计算此列表中的序列号数量,我将不胜感激。
我希望结果是“结果序列”列中的内容。
我知道如何让它计数并在更改的任务是非顺序的时返回正确的序列号。它是一系列基于单元格值和带数字的单元格计数的 IF、MATCH 和 COUNTIF 公式。它是搞砸它的连续条目。被序列偏移的任务被序列号计数偏移。
答:
2赞
Tom Sharpe
10/15/2023
#1
请尝试
=LET(manual,SORT(FILTER([Manual],[Manual]<>"")),
mrows,ROWS(manual),
mstarts,REDUCE("",SEQUENCE(mrows),LAMBDA(a,c,VSTACK(a,IF(c=1,INDEX(manual,1),IF(INDEX(manual,c)<>INDEX(manual,c-1)+1,INDEX(manual,c),""))))),
fmstarts,FILTER(mstarts,mstarts<>""),
mends,REDUCE("",SEQUENCE(mrows),LAMBDA(a,c,VSTACK(a,IF(c=mrows,INDEX(manual,mrows),IF(INDEX(manual,c+1)<>INDEX(manual,c)+1,INDEX(manual,c),""))))),
fmends,FILTER(mends,mends<>""),
lengths,fmends-fmstarts+1,
prevResult,IFERROR(XLOOKUP(TRUE,(FILTER([Manual],ROW([Manual])<ROW())=""),FILTER([Result],ROW([Result])<ROW()),0,0,-1),0)+1,
offset,XLOOKUP(prevResult,fmstarts,lengths,0),
IF(@[Manual]<>"",@[Manual],prevResult+offset))
评论