我想将日期范围扩展到各个日期并对数据进行排序。
基本上,我想要一组数据,例如这个Data set:
May 16, 2019 May 19, 2019 123
May 18, 2019 May 20, 2019 abc
May 26, 2019 May 29, 2019 xyz
并希望输出为:Output
May 16, 2019 123
May 17, 2019 123
May 18, 2019 123
May 18, 2019 abc
May 19, 2019 abc
May 26, 2019 xyz
May 27, 2019 xyz
可以使用公式来完成吗?
编辑:如何只为一个值获得所需的输出?说123?
=ARRAYFORMULA({
{TO_DATE(ROW(INDIRECT("A"&A1):INDIRECT("B"&B1))),
TRANSPOSE(SPLIT(REPT(C1&"♦", DAYS(B1, A1)+1), "♦")) };
{TO_DATE(ROW(INDIRECT("A"&A2):INDIRECT("B"&B2))),
TRANSPOSE(SPLIT(REPT(C2&"♦", DAYS(B2, A2)+1), "♦")) };
{TO_DATE(ROW(INDIRECT("A"&A3):INDIRECT("B"&B3))),
TRANSPOSE(SPLIT(REPT(C3&"♦", DAYS(B3, A3)+1), "♦")) }})
这是另一种只扩展一行数据的方法:
=ArrayFormula({TO_DATE(row(indirect("a"&A1&":A"&B1-1))),if(row(indirect("a"&A1&":A"&B1-1)),C1)})
您可以进一步开发它以为多行创建动态公式。
首先在D列创建一个辅助列,其中只包含剩余的夜数:
=ArrayFormula(if(A:A="","",B:B-A:A))
然后这将给出日期列表:
=ArrayFormula(to_date(vlookup(row(indirect("a1:A"&sum(D:D))),{sumif(row(D:D),"<="&row(D:D),D:D)-D:D+1,A:A},2)+
row(indirect("a1:A"&sum(D:D)))-
vlookup(row(indirect("a1:A"&sum(D:D))),sumif(row(D:D),"<="&row(D:D),D:D)-D:D+1,1)))
这将给出C列数据:
=ArrayFormula(vlookup(row(indirect("a1:A"&sum(D:D))),{sumif(row(D:D),"<="&row(D:D),D:D)-D:D+1,C:C},2))
说明。
列E到J包含到达最终公式的步骤。
E栏:
=ArrayFormula(sumif(row(D:D),"<="&row(D:D),D:D))
这根据D列给出了夜间停留的总计。
F栏:
=ArrayFormula(sumif(row(D:D),"<="&row(D:D),D:D)-D:D+1)
这使得运行总计直到开始日期 - 需要使vlookup稍后工作。
G栏:
=ArrayFormula(row(indirect("a1:A"&sum(D:D))))
数字1到N,其中N是从D列获得的总夜数。
H栏:
=ArrayFormula(vlookup(row(indirect("a1:A"&sum(D:D))),{sumif(row(D:D),"<="&row(D:D),D:D)-D:D+1,A:A},2))
每个日期范围的开始日期。
第一栏:
=ArrayFormula(vlookup(row(indirect("a1:A"&sum(D:D))),sumif(row(D:D),"<="&row(D:D),D:D)-D:D+1,1))
与每个日期范围的开头对应的数字。
J栏:
=ArrayFormula(vlookup(row(indirect("a1:A"&sum(D:D))),{sumif(row(D:D),"<="&row(D:D),D:D)-D:D+1,A:A},2)+
row(indirect("a1:A"&sum(D:D))))
每个日期范围的开始日期加上数字1到N.
K栏:
=ArrayFormula(to_date(vlookup(row(indirect("a1:A"&sum(D:D))),{sumif(row(D:D),"<="&row(D:D),D:D)-D:D+1,A:A},2)+
row(indirect("a1:A"&sum(D:D)))-
vlookup(row(indirect("a1:A"&sum(D:D))),sumif(row(D:D),"<="&row(D:D),D:D)-D:D+1,1)))
与列J相同减去每个日期范围的起始编号。
L列的工作方式与H列的工作方式相同。