[英]Arrayformula to find overlaps in date ranges
在可在此處找到的先前問題中, Shane 先生友情提供了以下用於查找日期范圍重疊的公式:
=ARRAYFORMULA(TEXTJOIN(", ",TRUE,IF(($A1<=$B$1:$B$5)*($B1>=$A$1:$A$5)*($C1=$C$1:$C$5),IF(ROW($A$1:$A$5)=ROW(),"","Row"&ROW($A$1:$A$5)),"")))
向下拖動時,結果為(D 列):
# | 一種 | 乙 | C | 丁 |
---|---|---|---|---|
1個 | 01/01/2022 | 02/01/2022 | 任務1 | 第三行 |
2個 | 2022 年 1 月 15 日 | 02/15/2022 | 任務二 | |
3個 | 01/29/2022 | 02/03/2022 | 任務1 | 第一行,第三行 |
4個 | 01/18/2022 | 02/22/2022 | 任務三 | |
5個 | 02/02/2022 | 02/15/2022 | 任務1 | 第三行 |
問題是:可以用數組公式代替嗎?
也許您可以使用自定義 Google 表格 Function ( =findOverlaps()
) 使用腳本來模仿ARRAYFORMULA
行為。 您可以檢查下面的示例腳本,您可以將其添加為電子表格文件中的綁定腳本:
function findOverlaps(arr) {
var res = [];
var filtered = arr.filter((data,index)=>{
return data[2] == arr.map((data)=>{return data[2]}).filter((a, i, aa) => aa.indexOf(a) === i && aa.lastIndexOf(a) !== i) ? data.push((parseInt(index)+1)) : null;
});
filtered.map((data,index)=>{
for(var x=0; x < 2; x++){
filtered.map((check)=>{
res.push([arr.map((data)=>{return data[2]}).filter((a, i, aa) => aa.indexOf(a) === i && aa.lastIndexOf(a) !== i).join(''),data[3],dateRangeOverlaps((filtered[parseInt(index)][x]),check[0],check[1], check[3])]);
});
}
});
res = res.filter((z)=>{return z[0] == 'Task1' && z[2] != 'x' ? z[2] : ''});
return arr.map((x,index)=>{
return res.map((look)=>{
if((parseInt(index)+1) == look[1]){
return "Row"+look[2];
}
}).filter((fn)=>{return fn}).join(', ')
});
}
function dateRangeOverlaps(currentDateToCheck, startDate, endDate, row) {
return (currentDateToCheck > startDate && currentDateToCheck < endDate) ? row : 'x'
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.