从Excel中的开始和结束时间戳填充日历列表

时间:2019-06-09 08:33:50

标签: excel excel-formula timestamp excel-2010

我有一个带有开始时间戳记和结束时间戳记的活动列表,我需要用相应的活动和持续时间填充日期列表。

我尝试了各种复杂的IF语句,VLOOKUPS和INDEX MATCH。

我的数据如下:

Activity Name   Location          Start                  End          
--------------- ---------- --------------------- --------------------- 
Act1            Loc1       13/07/2019 12:00 AM   15/07/2019 12:00 PM  
Act2            Loc1       20/07/2019 12:00 AM   22/07/2019 12:00 PM  
Act3            Loc2       11/07/2019 12:00 AM   13/07/2019 12:00 PM  

,并希望显示如下:

 Date         Loc1_Activities   Hours   Loc2_Activities   Hours  
------------ ----------------- ------- ----------------- ------- 
1/07/2019                                                       
2/07/2019                                                       
3/07/2019                                                       
4/07/2019                                                       
5/07/2019                                                       
6/07/2019                                                       
7/07/2019                                                       
8/07/2019                                                       
9/07/2019                                                       
10/07/2019                                                      
11/07/2019                             Act3                 24  
12/07/2019                             Act3                 24  
13/07/2019   Act1                 24   Act3                 12  
14/07/2019   Act1                 24                            
15/07/2019   Act1                 12                            
16/07/2019                                                      
17/07/2019                                                      
18/07/2019                                                      
19/07/2019                                                      
20/07/2019   Act2                 24                            
21/07/2019   Act2                 24                            
22/07/2019   Act2                 12                            
23/07/2019                                                      
24/07/2019                                                      
25/07/2019                                                      
26/07/2019                                                      
27/07/2019                                                      
28/07/2019                                                      
29/07/2019                                                      
30/07/2019                                                      
31/07/2019                                                      

1 个答案:

答案 0 :(得分:0)

理想情况下,您希望在Power Query中执行此操作。但是,这个问题带有excel-2010标签,我认为Power Query仅可作为Excel 2010中的外部加载项使用(至少对于Windows)。

第二种最简单的方法可能是使用VBA。但是这个问题没有vba标签。因此,假设您只想使用公式来实现这一目标。

这是我的工作表"Sheet1"的布局,我认为它与您的第一个表匹配。

Source data

这是我的输出工作表的布局(在这里,我使用公式来重新构造数据)。我认为它与您的第二张桌子匹配。

Output data


•黄色单元格(B1)中的公式为:

="Loc"&QUOTIENT(COLUMN()-COLUMN($B$1),2)+1

可以根据需要将其拖动到右侧。


•绿色单元格(B4)中的数组公式为:

=IFERROR(INDEX(Sheet1!$A$2:$A$4,AGGREGATE(15,6,IF(($A4>=INT(Sheet1!$C$2:$C$4))*($A4<ROUNDUP(Sheet1!$D$2:$D$4,0))*(Sheet1!$B$2:$B$4=B$1),ROW(Sheet1!$A$2:$A$4)-ROW(Sheet1!$A$2)+1,NA()),1)),"")

必须使用CTRL+SHIFT+ENTER输入(Excel会自动在公式周围加上花括号{},以使您知道它是数组公式)。向下拖动以填充下面的单元格。


•蓝色单元格(C4)中的数组公式为:

=IF(LEN(B4),(MIN($A4+1,INDEX(Sheet1!$D$2:$D$4,AGGREGATE(15,6,IF(($A4>=INT(Sheet1!$C$2:$C$4))*($A4<ROUNDUP(Sheet1!$D$2:$D$4,0))*(Sheet1!$B$2:$B$4=B$1),ROW(Sheet1!$A$2:$A$4)-ROW(Sheet1!$A$2)+1,NA()),1)))-MAX($A4,INDEX(Sheet1!$C$2:$C$4,AGGREGATE(15,6,IF(($A4>=INT(Sheet1!$C$2:$C$4))*($A4<ROUNDUP(Sheet1!$D$2:$D$4,0))*(Sheet1!$B$2:$B$4=B$1),ROW(Sheet1!$A$2:$A$4)-ROW(Sheet1!$A$2)+1,NA()),1))))*24,"")

必须使用CTRL+SHIFT+ENTER输入(Excel会自动在公式周围加上花括号{},以使您知道它是数组公式)。向下拖动以填充下面的单元格。


•您可以在单元格A4中输入日期,也可以使用此公式(并将其向下拖动到下面的单元格中):

=DATE(2019,7,1)+ROW()-ROW($A$4)

将数组公式(绿色和蓝色单元格)向右拖动时,需要确保您不会用*_Hours列的公式覆盖*_Activities列的公式。如果将它们作为选定的单位(单元格或列)拖动,Excel将自动为您处理。希望有道理。


标题的公式(尽管上面的方法没有必要):

  • 在单元格B3中:=B$1&"_Activities"
  • 在单元格C3中:=C$1&"_Hours"

然后将其(作为一个单元)拖动到右侧。