如何在两个日期之间扩展数据?

问题描述 投票:1回答:2

我想将日期范围扩展到各个日期并对数据进行排序。

基本上,我想要一组数据,例如这个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?

google-sheets google-sheets-formula
2个回答
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), "♦")) }})

0


0
投票

这是另一种只扩展一行数据的方法:

=ArrayFormula({TO_DATE(row(indirect("a"&A1&":A"&B1-1))),if(row(indirect("a"&A1&":A"&B1-1)),C1)})

enter image description here

您可以进一步开发它以为多行创建动态公式。

首先在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))

enter image description here

说明。

列E到J包含到达最终公式的步骤。

enter image description here

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列的工作方式相同。

© www.soinside.com 2019 - 2024. All rights reserved.