在MS Excel中,如何对从开始和结束生成的序列进行VSTACK?

p1iqtdky  于 2023-02-25  发布在  其他
关注(0)|答案(2)|浏览(111)

我有一个包含日期范围开始和结束的表,如下所示
| 启动|结束|
| - ------|- ------|
| 1个|五个|
| 十个|十三|
| 二十个|二十二|
我试图创建一个列表,列出所有介于开始和结束之间的日期/数字(包括开始和结束),因此,我的输出将是{1,2,3,4,5,10,11,12,13,20,21,22}。
对于只有一个起点和终点的情况,公式为

=SEQUENCE(B2-A2+1,,A2)

我认为它只是一个序列的VSTACK,所以我写了这个公式,将范围作为输入

=VSTACK(SEQUENCE($B$2:$B$3-$A$2:$A$3+1,,$A$2:$A$3))

然而,它仅取每个序列的第一个值,并生成输出{1,10,20}。
既然我真的不想让我的文件成为xlsm(因为宏在我的org中是不允许的),有没有什么方法可以在没有VBA的情况下实现这一点?
谢谢你,
阿舒托什·德什潘德

4nkexdtk

4nkexdtk1#

这里有一种方法:

D1中的公式:

=LET(x,SEQUENCE(B4),FILTER(x,COUNTIFS(A2:A4,"<="&x,B2:B4,">="&x)))

以防范围不从1开始,并且最后一个单元格不包含最大值:

=LET(x,SEQUENCE(MAX(A2:B4),,MIN(A2:B4)),FILTER(x,COUNTIFS(A2:A4,"<="&x,B2:B4,">="&x)))
7eumitmz

7eumitmz2#

这是一种不生成所有这些变量的方法,但它有点长:

=DROP(REDUCE("",A2:A4&"|"&B2:B4,LAMBDA(a,c,LET(split,TEXTSPLIT(c,"|"),start,INDEX(split,1),end,INDEX(split,2),VSTACK(a,SEQUENCE(end-start+1,1,start))))),1)

@JvdV建议的通过行索引更好:

=DROP(REDUCE(0,ROW(A2:A4),LAMBDA(x,y,VSTACK(x,SEQUENCE(1+INDEX(B:B,y)-INDEX(A:A,y),,INDEX(A:A,y))))),1)

相关问题