我想将日期范围扩展到各个日期并对数据进行排序。
基本上,我想要一组数据,例如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吗?
答案 0 :(得分:0)
=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), "♦")) }})
答案 1 :(得分:0)
这是仅扩展一行数据的另一种方法:
=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列相同。