获取Excel表中所有匹配项的行列坐标

时间:2018-11-01 11:27:38

标签: excel-formula

我有一个日期表和可变的日期范围,并且需要查找表中日期在我的开始/结束日期范围内的行和列的所有匹配项。

作为我的案例的一个缩影示例:

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

我还有其他大小与日期数组类似的数组,我需要将其与找到的坐标相匹配,以便使用找到的坐标来查找其他数据。

3 个答案:

答案 0 :(得分:0)

尝试:

=IF(AND(A4>=$B$1,A4<=$B$2),"In","Out")

结果:

enter image description here

答案 1 :(得分:0)

根据数组的大小,您需要创建所有坐标的列表(在帖子末尾生成公式)。然后从该坐标中获取值,检查条件(列“ C”)并过滤TRUE(列“ D”)。 data

并显示公式: formulas

结果(以绿色突出显示):

result

以下是根据数据范围大小生成列和行的列表的两个公式:

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)

有点长的公式,但是基本上这个公式会:

  1. 使用索引(基于row())和矩阵(3x3)获取相关日期
  2. 根据日期是否在日期之间转换为1和0
  3. 如果为1,则返回列/行号

对于列:

=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")

Image of the excel solution