我有一个日期表和可变的日期范围,并且需要查找表中日期在我的开始/结束日期范围内的行和列的所有匹配项。
作为我的案例的一个缩影示例:
Start date: 01Jan2018
End date: 30Jun2018
带有日期的表:
{01Jan2018; 01Feb2018; 01Apr2018}
{17Mar2018; 05Jun2018; 16Aug2018}
{11Apr2018; 01Jul2018; }
如果尚未输入日期,则表中的某些字段可能为空白。我相信我可以通过对日期数组运行开始/结束日期来制作一个比较数组,例如与
=--(array>=start_date)*(array<=end_date)
将会输出
{1;1;1}
{1;1;0}
{1;0;0}
但是要从此处转到行列集的垂直列表的下一步是什么,其中行号和列号位于单独的单元格中?在上面的示例中,我需要一个类似的列表:
1 1
2 1
3 1
1 2
2 2
1 3
我还有其他大小与日期数组类似的数组,我需要将其与找到的坐标相匹配,以便使用找到的坐标来查找其他数据。
答案 0 :(得分:0)
答案 1 :(得分:0)
根据数组的大小,您需要创建所有坐标的列表(在帖子末尾生成公式)。然后从该坐标中获取值,检查条件(列“ C”)并过滤TRUE
(列“ D”)。
结果(以绿色突出显示):
以下是根据数据范围大小生成列和行的列表的两个公式:
A9: =IF(B9="end";"end";MOD(ROW(C1)-1+COLUMNS($A$1:$C$3);COLUMNS($A$1:$C$3))+1)
B9: =IF(1+INT((ROW(C1)-1)/COLUMNS($A$1:$C$3))>COLUMNS($A$1:$C$3);"end";1+INT((ROW(C1)-1)/COLUMNS($A$1:$C$3)))
答案 2 :(得分:0)
有点长的公式,但是基本上这个公式会:
对于列:
=IF(--(INDEX($A$4:$C$6,ROUNDUP((ROW()-1)/3,0),IF(MOD((ROW()-1),3)=0,3,MOD((ROW()-1),3)))>=$B$1)*(INDEX($A$4:$C$6,ROUNDUP((ROW()-1)/3,0),IF(MOD((ROW()-1),3)=0,3,MOD((ROW()-1),3)))<=$B$2)<>0,ROUNDUP((ROW()-1)/3,0),"n/a")
对于行:
=IF(--(INDEX($A$4:$C$6,ROUNDUP((ROW()-1)/3,0),IF(MOD((ROW()-1),3)=0,3,MOD((ROW()-1),3)))>=$B$1)*(INDEX($A$4:$C$6,ROUNDUP((ROW()-1)/3,0),IF(MOD((ROW()-1),3)=0,3,MOD((ROW()-1),3)))<=$B$2)<>0,IF(MOD((ROW()-1),3)=0,3,MOD((ROW()-1),3)),"n/a")