簡體   English   中英

Arrayformula 查找日期范圍內的重疊

[英]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 腳本

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM